1 class Test {
2 public static void main(String[] args) {
3 System.out.println(new B().getValue()); //1、执行B的构造方法 //14、执行父类A的getValue得到17 //18、输出返回值17
4 }
5 static class A {
6 protected int value;
7 public A (int v) {
8 setValue(v); //3、调用子类B重写的setValue
9 }
10 public void setValue(int value) {
11 this.value= value; //5、value=10 //13、valve=16
12 }
13 public int getValue() {
14 try {
15 value ++; //6、value=11 //15、value=17
16 return value; //10、执行finally前暂存value的值11,返回11 //18、执行finally前暂存的值17,返回17
17 } finally {
18 this.setValue(value); //7、return前执行finally,this指当前实例对象B,调用子类B的setValue,value=22 //16、this调用子类B的setValue方法,得到value=34
19 System.out.println(value); //9、输出22 //17、输出34
20 }
21 }
22 }
23 static class B extends A {
24 public B () {
25 super(5); //2、调用父类A的构造函数
26 setValue(getValue()- 3); //5、调用父类A的getValue获得11 //11、调用子类B的setValue传入11-3的结果8
27 }
28 public void setValue(int value) {
29 super.setValue(2 * value); //4、显式调用父类A的setValue传入10 //8、传入2*11的值22 //12、传入2*8的值16,调用父类的setValue传入16
30 }
31 }
32 }
Test.main()函数执行后的输出是( )
答:
22
34
17