java文件中,
public class A2Demo {
public static void main(String[] args) {
Koo koo = new Koo();
}
}
class Foo {
public Foo(){
this.test();
}
public void test(){
System.out.println("foo");
}
}
class Koo extends Foo{
int i = 3;
public void test(){
System.out.println(i);
}
}
问: 子类中的 System.out.println(i); 为什么会输出0呢,为什么不输出3呢,thanks
所以在编程中尽量不要在构造函数中调用可以被override的函数(非私有函数),因为子类在override的时候可能会如本例中一样使用还未被初始化的字段,从而产生隐蔽。
就是调用了父类的构造器,此时i还没有初始化,是0。
父类的构造器调用了test()方法
此时的test方法是子类的test()方法而不是父类的,
因为子类的test已经覆盖了父类的方法,所以输出了0。