package demo1;
public abstract class Super {
Super(){
print();
}
public abstract void print();
}
package demo1;
public class Sub extends Super{
private int i = 10;
public void print(){
System.out.println(i);
}
public static void main(String args[]){
Sub sub = new Sub();
sub.print();
}
}
Output:
0
10
这是为什么??
这个涉及到类的初始化的问题
当你入口类Main方法里掉用Sub sub = new Sub(); 触发Sub类初始化,但他发现他有父类Super,而Super类没有初始化,所有先初始化父类,当初始化父类的时候,他的构造方法调用了一个抽象方法,所有找到子类的实现,(注意:这个时候的i值是0,默认值),所有输出0,之后初始化子类Sub, i的值是10,当调用print方法时候输出10