我有以下代码:http://ideone.com/Ww5bd8
class A {
public int n = 1;
public int get() { return n; }
}
class B extends A {
public int n = 2;
public int get() { return n; }
}
class javaprog {
public static void main(String args[]) {
B b = new B();
A a = b;
System.out.println("a = b");
System.out.println(a.get());
System.out.println(a.n);
System.out.println(b.n);
}
}
这导致输出:
a = b
2
1
2
没有创建A,所以第2行如何分配1到n执行过。当然,由于对象引用,a和b是相同的实例,因此在内存中,a.n如何引用与b.n不同的位置?
如果n是静态的,我可以理解这一点,但它是一个实例变量。