高手帮忙看一下继承的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 19:34:53
class Dad{
int i = 1;
void printI(){
System.out.println(i + " dad"); // --------------a
}
Dad(){
printI(); // --------------b
}
}
class Son extends Dad{
int i = 2;
void printI(){
System.out.println(i + " son"); // --------------c
}
Son(){
printI(); // --------------d
}
}
public class test extends Son{
public static void main(String[] args){
test eTest = new test();
//eTest.printI();
}
}
为什么输出是:
0 son
1 dad
我知道子类继承时覆盖了父类 但是我觉得应该输出 2 son
请教高手解释一下
刚才错了 应该是输出为:
0 son
2 son

输出应该是
0 son
2 son

调用子类构造方法的时候必然先调用父类构造方法,
Son(){
----在这里先调用父类的构造方法-------
printI(); // --------------d
}

父类的构造方法又会利用多态调用子类覆盖了的printI()方法,也就是说son的printI执行2次,一次是父类调用的,一次是子类自己调用的,父类调用的时候i没赋值,取int型默认值0,第二次取son类定义的2

我也认为结果是

2 son
1 dad