public class Parent
{
public void test()
{
}
public Parent()
{
test();
}
public static void main(String[] args)
{
new Child();
}
}
class Child extends Parent
{
public void test()
{
}
}
各位先猜猜打印的结果是多少呢?为什么呢?
----------------------------------------------------------------
答案:下面是摘自本人编写的《Java就业培训教程》中的一段讲述,请大家注意第(4)步和第(5)步的讲解,调用完父类的构造方法后,接着才进行成员变量的显式初始化操作,上面代码中的private int instanceValue = 20;定义应看成两部分:第一部分是定义变量,第二部分是给变量赋值,变量定义位于父类构造方法之前,变量赋值位于父类构造方法之后。在父类的构造方法执行时,根据多态性,它会去调用子类中定义的test()方法,可是,这时候,子类中的成员变量还没执行显式初始化操作, 对于private int instanceValue = 20;定义,instanceValue 的值为默认的初始化值0,所以,这时候在test方法中打印出的值为0。