父类:
public class TBase {
public int i = 1;

public int ddd()
{
return i;
}
}
子类:
public class AAExtendsBase extends TBase{
public int i = 2;

public int ddd()
{
return i;
}
}
测试类:
public class TTT { public static void main(String arg[]){
TBase tb = new TBase();
TBase dd = new AAExtendsBase();

System.out.println(tb.i);
System.out.println(dd.i);

System.out.println(tb.ddd());
System.out.println(dd.ddd());
}
}大家说说会打印出什么?
结果是:1,1,1,2
第1,3,4个结果可以理解。
但是第2个结果为什么会是1?
其中,我感觉到奇怪的是,子类调用重写的方法(即:dd.ddd()),都是自己重载后的方法。
为什么调用重载的属性却是父类的属性(dd.i)?请高手指点!

解决方案 »

  1.   

    TBase dd = new AAExtendsBase();
    是什么意思?
    谁能清楚解释一下?

      

  2.   

    顶~~~上!,LZ注意字段是正常是私有的。。private  希望自己努力。。
      

  3.   

    TBase dd = new AAExtendsBase(); 和 AAExtendsBase  dd = new AAExtends();
    在这个地方的意思是一样的啊!!?
      

  4.   

    steedhorse(晨星) 说得对
    多态只针对方法而言,而且不能是static或private或final的
      

  5.   

    父类引用指向子类对象,此时,对于TBase类型的dd 来说只有在TBase定义的字段可见,所以dd.i=1;
      而如果出现多态(同时满足:1.有继承 2.有父类引用指向子类对象 3.有方法重写)则调用实际所指对象的方法:dd.ddd();就是子类的ddd()方法.[他重写类父类的ddd()方法]
      

  6.   

    TBase dd = new AAExtendsBase();
    ----
    System.out.println(dd.i);
    dd.i是TBase.i,这很正常,因为你本来声明的就是TBase
    ----------------