题库里遇到的一道题:
分析如下:
new B();创建一个B类的实例
1.此时执行super(5);语句调用父类带参数的构造方法,该构造方法调用了setValue();方法,但是该方法已经被继承A类的b类进行重写,所以这里调用重写后的setValue();方法,此时value的值为2*5=10.
然后继续执行下面代码,调用getValue()方法,此时的value值为10,执行value++之后,值为11,并将11进行返回保存。在执行finally();中的语句,需要注意的是这里是B类调用getValue();方法,所以该this代表B的实例,再执行B类中的setValue();方法输出11*2=22.
2.getValue();中的返回值为11,所以B中构造方法第二句执行setValue(11-3=8);操作,执行重写后的方法setValue();此时value值为16;
new B().getValue();
3.执行new B().getValue();操作,此时的value为16,调用getValue();方法,value++之后值为17,再将value值进行保存。执行finally中的语句,输出结果为17*2=34;
4.此时main方法中要求输出new B().getValue();的值,该值为第二次return的值17.
所以该程序最终的输出结果为:22 34 17;