class Father{
int a=1,b=2;
void show(){System.out.println(a+" "+b);}
}
class Son extends Father{
int b=3,c=4;
void show(){System.out.println(a+" "+b+" "+c);}
}
class Text{
public static void main(String[] args)
{
Father fa =new Father();
fa.show();
Son sa=new Son();
sa.show();
Father fb;
fb=sa;
fb.show();
System.out.println(fb.a+" "+fb.b);
if(fb instanceof Son)
sa=(Son)fb;
System.out.println(sa.a+" "+sa.b+" "+sa.c);

}
}
运行结果是:
1 2
1 3 4
1 3 4   //这个看不懂啊 不是Father fb=sa吗 应该是father里的show把
1 2 //还有他啊 fa=sa了 为什么 fa.b还是2
1 3 4

解决方案 »

  1.   

    没分?!!  算了,我就吃点亏吧!   1 3 4   //这个看不懂啊 不是Father fb=sa吗 应该是father里的show把
       是子类的SHOW, FB调用时不管指向的类是什么类型,都是调用它的show方法,我想.   1 2 //还有他啊 fa=sa了 为什么 fa.b还是2
       这句没什么问题呀? 原句不是这样吗 : System.out.println(fb.a+" "+fb.b);
      

  2.   

    1 3 4   //这个看不懂啊 不是Father fb=sa吗 应该是father里的show把
    这是JAVA多态的表现,虽然这里的类型是Father,但是fb所指向的对像是Son 的实例,所以调用方法实际上是调用了sa的方法。1 2 //还有他啊 fa=sa了 为什么 fa.b还是2
    在里虽然sa附给了fa,但是fa.b是按类型去访问一个变量,与方法调用不同,所以指向的是Father 的b
      

  3.   

    阿 我都不知道我的分用完了  晕死了阿
     1 3 4   //这个看不懂啊 不是Father fb=sa吗 应该是father里的show把
    fb 引用的方法show是发Father类的方法 show阿 可结果是子类的  show 我不明白阿
      

  4.   

    1 3 4   //这个看不懂啊 不是Father fb=sa吗 应该是father里的show把
    fb 引用的方法show是发Father类的方法 show阿 可结果是子类的  show 我不明白阿
    ——————————————————————
    简单点说,由于向上转型,子类的方法都暂时看不见了(fb只能调父类方法),但是子类里(SHOW())方法重写,所以调用的是子类的SHOW()。多写点程序试试呢。