class Base {
private int base = 10; public Base() {
test(base);
System.out.println(base + "1");
} void test(int base) { ++this.base;
}
}class Child extends Base {
private int child = 20; public Child() {
test(child);
System.out.println(child + "2");
} void test(int child) { --this.child;
} public static void main(String[] args) {
new Child();
}
}为什么上面那段代码输出的结果是101
192
101是怎么输出的,不是很理解,有大神可以讲解一下吗?

解决方案 »

  1.   

    父类的test方法被重写了,所以父类的构造方法执行的是子类中的test方法,base的值没变,最后输出就是101了
      

  2.   

    +1父类的构造方法执行的时候,调用的test(base),调用的是子类的test(int child)方法。这时执行了一次 --this.child.  不过这时的child=-1.(子类没有显示给变量赋值,child原来是0)。等到父类构造方法执行完后,回到子类继续执行,这时要给 child赋值 20。之后执行构造方法,输出192。
    楼主可以在test(int child)里加一句:
    System.out.println("child now is   "+this.child);
    更利于理解初始化的过程。