一个让98%的JAVA程序员犯难的程序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值