题目:请问下列代码输出的值为?(据说下面这题99%的Java程序员都会做错!来试试看)
public class A {
int x = 20;
public A() {
printInfo();
}
public void printInfo(){
System.out.println(x);
}
}
public class B extends A{
int x = 10 ;
public B() {
printInfo();
}
public void printInfo(){
System.out.println(x);
}
}
public class test {
public static void main(String[] args) {
new B();
}
}
我首先认为的答案:输出:
20 10
后来发现,父类中和子类中有相同的方法,方法由哪个对象调用就是那个对象的方法,而这里虽然是再A类中调用的,但是是B类对象调用B类构造器而导致A类构造器初始化的,所以,A类的printInfo方法应该输出的是B类中的x。又认为应该输出:
10 10
然后在编译器里看了答案:
0 10 !!!好的确实没做对.......

可以利用dbug打断点的方式查看具体的过程!