刚学java不久,在牛客网上面刷题刷到一题,觉得有点意思
https://www.nowcoder.com/question/next?pid=13684379&qid=15319&tid=20025891
- 第一步
这题首先从主程序入口,从输出语句这里进入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
总结:一定要根据代码逐句分析,并根据函数位置分析应该调用子类还是父类的方法;假如能够调试最好了
第一次写 很垃圾 就这样吧
有根据其他大牛博客内容理解,在此表示感谢。