class TA {
public String s = "A";
public String getS() {
return s;
}
}
class TB extends TA {
public String s = "B";
public String getS() {
return s;
}
}
public class TestInheritance {
public static void main(String[] args) {
TA a = new TA();
TB b = new TB();
a.s = "AA";
b.s = "BB";
a = b;
// TA a2 = b;
// System.out.println(a == a2);
// System.out.println(a2.s);
// System.out.println(a2.getS());
// java的内存模型:成员变量是放在栈区?
// 父类引用指向子类对象,方法是可以被覆盖的,但是成员变量是无法覆盖的?
//
// (2014.1.18 add)说明,加载TB类时加载了TA类,所以b这个引用地址(堆内存开始的地址)指向的空间
// 大小为TA.class占用的内存大小和TB.class占用的内存空间,那么就可以解释
// System.out.println(a.s);输出的结果为什么是'A'了吗?
// 方法被重写了,但是成员变量不能被重写,所以还是两份
System.out.println(a.s);
System.out.println(b.s);
System.out.println(a.getS());
System.out.println(b.getS());
}
}