继承执行顺序
public class DifficultTest {
public static void main(String[] args) {
System.out.println(new B().getValue());
}
static class A {
protected int value;
public A(int v) {
System.out.println("public A(int v)执行了");
setValue(v);
}
public void setValue(int value) {
System.out.println("AsetValue(int Value)执行了");
this.value = value;
}
public int getValue() {
System.out.println("AgetValue()执行了");
try {
value++;
return value; //执行getValue返回的结果
} finally { //finally是一定执行的块
setValue(value);
System.out.println(value);
}
}
}
static class B extends A {
public B() { //子类的this
super(5);
setValue(getValue() - 3);
System.out.println("public B()执行了");
}
public void setValue(int value) {
super.setValue(2 * value);
System.out.println("BsetValue(int value)执行了");
}
}
}
返回结果为:
public A(int v)执行了 v=0
* AsetValue(int Value)执行了 v=10
* BsetValue(int value)执行了 v=10
* AgetValue()执行了 v=11
* AsetValue(int Value)执行了 v=22
* BsetValue(int value)执行了 v=22
* 22 v=11(getValue返回value值为11)
* AsetValue(int Value)执行了 v=16
* BsetValue(int value)执行了 v=16
* public B()执行了 v=16
* AgetValue()执行了 v=17
* AsetValue(int Value)执行了 v=34
* BsetValue(int value)执行了 v=34
* 34
* 17 v=17 (getValue返回value值为17)