public class father{
say(){};
}
public class son extends father
{say(){
};
public static void main(String args[])
{
father fa=new son();
fa.say;
son son1=(son)fa;
son1.say();
}
}
son1和fa调用的都是子类的方法吧?
那son son1=(son)fa;和son son1=new son();的用法有什么区别呢?
(object)object这个概念理解的不太好,请指教

解决方案 »

  1.   

    son son1=(son)fa;    //由于有father fa=new son(); 
    son son1=new son();  //直接实例化;
    //主要还是基类和派生类的关系,看看<<JAVA编程思想>>,理解透了,就不复杂了
      

  2.   

    只能将具体的赋给抽象的,不能把抽象的赋给具体的,小的可以转换成大的,大的就不一定能转换成小的.
    举个例子:
    char ch ='a';
    int k=int(ch);//可以
    但是:
    int k=1111;
    char ch=(char)k;//不行
    这是因为int的范围比char的范围大
    son son1=(son)fa; //写这行代码的前提是,已经知道fa是Son的实例或者其子类的实例
    根据楼主这行代码,应该也可以把其他的father字类转换成son类的实例.
    给楼主提个醒,这在程序中很容易抛出ClassCastException的.
      

  3.   

    还有关于方法重写,只需要看那个实例是那个类的实例,就调用的是该类的方法,如果该类没有重写该方法,则一定是调用父类的方法.
    father fa=new son(); //fa是son类
    fa.say();//所以调用son的say方法 
    son son1=(son)fa; //无论怎么类型转换,说到底,son1还是son的实例
    son1.say(); //所以仍旧调用son类的say方法.