一道简单的代码理解题

刚学java不久,在牛客网上面刷题刷到一题,觉得有点意思
https://www.nowcoder.com/question/next?pid=13684379&qid=15319&tid=20025891
EditPlus代码

  • 第一步

这题首先从主程序入口,从输出语句这里进入new B():
来到B的构造方法,super(5)则是调用了父类A的构造方法,这里有一个setValue,而B类也重写了父类A的setValue()方法,那么应该调用哪个类的方法呢?
注意,这里由于是在B的构造函数里面,因此要调用B类的setValue()方法
B类setValue()方法体里面调用了父类的setValue()方法,这里给父类变量value设置值为10;
随后来到B的构造函数的第二行,这里首先调用父类的getValue():
try: value值变为11;
finally: 此时仍然调用子类setValue(),此时第一次输出value:
输出的值为22

  • 第二步
    接着来到第29行这里,尽管前面输出是22,但getValue得到的值是11
    第29行运行过后,再次来到A类的setValue:
    try: value的值变为17;
    finally: 此时第二次输出value:
    输出的值为34

  • 第三步
    主程序最后输出value的值,value还停留在第二步的try处,此时第三次输出value:
    输出的值为17

总结:一定要根据代码逐句分析,并根据函数位置分析应该调用子类还是父类的方法;假如能够调试最好了

第一次写 很垃圾 就这样吧
有根据其他大牛博客内容理解,在此表示感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值