代码如下:
public class A { public String c = "parent"; public static void main(String[] dd) {
A a = new B();
B b = (B) a;
System.out.println(a);
System.out.println(b);
System.out.println(a.c);
System.out.println(b.c);
}
}
class B extends A { String c = "child";}运行结果如下:sa.B@c17164
sa.B@c17164
parent
child大家帮忙解释一下了.

解决方案 »

  1.   

    在B中又定义了变量String c = "child";
    System.out.println(b.c);当然打印child 了。A a = new B();
    B b = (B) a;
    你这两个变量指的不是同一对象(地址),是两个。
      

  2.   

    a跟b 的c是两个不同的变量啊你把B的c去掉就行了啊
      

  3.   

    1:同一个对象,所以他们的内存地址是一样的,a.getClass()==b.getClass 
    2:属性没有多态
      

  4.   

    以前讨论过,子类对象内部有一个父的子对象,内存大概是这样的:a---->+---------------+ <---------b
          |               |
          |c--------------+---------------->"parent"  
          |               |
          |父类子对象       |
          +---------------+
          |               |
          |c--------------+----------------->"child"
          |               |
          |子类             |
          +---------------+a.c与b.c是所指不同。也就是在子类对象内部有两个属性,一个在父类子对象内,一个不在。
      

  5.   

    很简单,成员不能覆盖,只有方法才可以覆盖。
    子类能继承父类的成有成员,在子类的中的与父类的同名成员是不同的对像。你调a.c和b.c当然不一样了。