abstract class A{
public A(){
this.print() ;
}
public abstract void print() ;
}
class B extends A{
private int i = 10 ;
public B(int i){
this.i = i ;
}
public void print(){
System.out.println(this.i) ;
}
};
public class Demo{
public static void main(String artgs[]){
new B(100) ;
}
};结果是 0; 很是不懂!
希望哪位详细解释下,谢谢!
public A(){
this.print(){
System.out.println(this.i) ;
}
}
this.i = i ;
}这样你应该明白为什么是0了么?
1.当new B(100) 时,jvm会在内存中申请一块恰好够放下B的内存。
2.这块内存清零。也就这块内存用二进制的0填存之。这时所有成员都被初始化为0了。
3.调用子类的构造方法,本例中调用的是B的构造方法。
4.子类构造中,第一件事就是调用父类的构造方法。本例中调用了类A的构造方法,执行了print()方法,打印出i的值,结果当然是0.
5.父类的构造方法结束后,子类的成员按它们出现的次序初始化。本例中i=10被执行。
6.继续执行子类构造方法中的其它语句。本例中执行i=100.