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; 很是不懂!
希望哪位详细解释下,谢谢!
解决方案 »
- java输出很不明白~~~~求指点
- 关于window.opener.location.href传中文 问题 头疼 不知道怎么改成post方式
- java构建三维模型,请高手指点迷津。。
- 非静态内部类为什么不能有静态成员
- 关于线程的notify()问题
- 请问一个方法需要一个java.util.Date类型的参数,请问我如何将当前时间传进去?
- 这种线程问题怎么解决,谢谢
- 用于连接ACCESS的JDBC driver除了jdbc:odbc之外,到哪下载啊?请大家提供一下?
- 请问一下 swing 里面有没有这样两个控件?
- 我怎样才能把JAVA学好
- 菜鸟弱弱的提个基础问题 编译时出错 不知道怎么修改
- 如何切换cvs服务器
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.