class test1{
public static void main(String[] args){
B b = new B();
System.out.println(b.getValue());
System.out.println(b.value);
}
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(value*2);
}
}
}
以上代码是我在牛客刷题看到的,当时比较迷惑,所以自己码了代码查看了一下。
这里要注意的是,getValue()中的return返回的值只是你调用了该方法时返回的值,而finally中对value的操作还是会影响value值的。所以在最终主函数语句输出的b.value为34,而不是17。