public class Test {
public static void main(String[] args) {
A a = new B();
B b =(B)a;
System.out.println(a);
System.out.println(b);
System.out.println(a.a);
System.out.println(b.a);
System.out.println(a.show());
System.out.println(b.show());
}
}
class A{
public int a =3;
public String show(){
return "父类:a="+a;
}
}
class B extends A{
public int a =5;
public String show(){
return "子类:a="+a;
}
}
运行结果:
B@4f1d0d
B@4f1d0d
3
5
子类:a=5
子类:a=5
求解:为什么a,b明明指向的地址
相同,而属性值不同?
这叫做成员隐藏,你的基类和派生类都有一个a,但是注意,派生类的a不是继承的,而是一个同名的独立的成员。
所以通过子类类型访问a的时候,访问的不是基类继承下来的a,而是这个派生类自己的a,仿佛基类的a被隐藏了一样。
而通过基类类型访问的,才是基类定义并且被派生类继承的a。
父类引用指向子类变量,编译看左边,运行看右边。具体可看下这个论坛: http://bbs.csdn.net/topics/390093847