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