今天发现了一个非常有意思的事情,请看下面代码
package test;
public class A {
private int i = baz();
public int baz() {
System.out.print("A"); return 0;
}
}
class B extends A {
private int i=baz();
@Override
public int baz() {
System.out.print("B"); return 10;
}
public static void main(String args[]) {
A a = new B();
}
}
运行之后发现打印结果为BB!
设置断点调试程序后发现,原因是在进入类A的属性 i 初始化的时候,调用的baz方法是类B的方法
所以我的理解是,虽然构造的是A的属性域,但是其仍然是在类B的环境中,所以使用的是类B的方法。
若有不正,请指出。