class A{
public int i=1;
A(){
System.out.println ("A is created and i="+i);
}
}
class B extends A{
B(){
System.out.println ("B is created and i="+i);
}
void printI(){
i++;
System.out.println ("i="+this.i+" "+super.i);
}
}
新建一个B的对象,然后调用printI()
输出结果
Java code
?
1
2
3
A is created and i=1
B is created and i=1
i=2 2 作者: che201311 时间: 2013-11-23 16:14
不明白i值的变化?作者: 张天昊76 时间: 2013-11-23 16:54
在子类的构造函数中,默认的有一句代码是调用父类的构造函数,而且是在第一行,所以先打印了一句
A is created and i=1
然后再执行子类构造函数中相应的代码,就打印出
B is created and i=1
然后调用了printI()方法,子类继承了父类中得i,所以打印了i=2,之所以后面的那个值是2而不是1,实际上是还是子类的i的值,要想要得到父类中i的值,可以在这个方法中建立父类的对象。通过父类对象来使用父类的i的值。作者: 心的方向 时间: 2013-11-23 16:57
当人new B的时候它会先调用父类的无参构造方法作者: 何超 时间: 2013-11-23 20:59
B b=new B()
由于你没重新定义i 所以A B中的i都是同一个
首先会运行A的构造函数然后运行B的构造函数
所以结果会是
1
1
然后i++了 变成了2
所以结果为
i=2 2