Test.main()函数执行后的输出是( )
class Test {
public static void main(String[] args) {
System.out.println(new B().getValue());
}
static class A {
protected int value;
public A (int v) {
setValue(v);
}
public void setValue(int value) {
this.value= value;
}
public int getValue() {
try {
value ++;
return value;
} finally {
this.setValue(value);
System.out.println(value);
}
}
}
static class B extends A {
public B () {
super(5);
setValue(getValue()- 3);
}
public void setValue(int value) {
super.setValue(2 * value);
}
}
}
A、6 7 7
B、22 34 17
C、22 74 74
D、11 17 34
解析:
除了B 中setValue中 super.setValue是调用了父类A的setValue方法,其他都是被B重写
finally 虽然会被执行,对应的变量值能被修改,但是实际的返回值不受影响,finally执行完后在return,所有答案是22 34 17