class Father
{
 int age = 20;
 Father()
 {
  say();
  System.out.println(age);
 }
 void say()
 {
  System.out.println(age);
 }
}
class Child extends Father
{
 int age = 40;
 Child(){
  say();}
 void say()
 {
  System.out.println(age);
 }
 public static void main(String[] args)
 {
  new Child();
 }
}
求这道题目的答案的具体解答方法和思路 谢谢 本人刚学JAVA一周 时间 谢谢 

解决方案 »

  1.   

    答案是:
    0
    20
    40
    考的是父类和子类初始化顺序的问题。基类参数->基类构造器->子类参数->子类构造器(未考虑静态字段以及静态块,实际是一样的)。
    Child子类构造函数中首先调用父类Father 的构造函数,遇见了say()方法,这个方法是缺省的方法故而可以看成类接口的一部分可以动态转型,从而调用Child的方法。然后这个时候Child的age没有初始化(基类还没有构造完全),故而打印0,后面当然打印自身的age为20,然后最后调用Child的打印age为40.