私はこれらの2つのクラスを持っています:
public class A
{
protected int _x;
public A(){
_x = 1;
}
public A(int x) {
_x = x;
}
public void f(int x) {
_x += x;
}
public String toString() {
return "" + _x;
}
}
public class B extends A
{
public B() {
super(3);
}
public B(int x) {
super.f(x);
f(x);
}
public void f(int x)
{
_x -= x;
super.f(x);
}
}
主要:
public static void main(String [] args)
{
A[] arr = new A[3];
arr[0] = new B();
arr[1] = new A();
arr[2] = new B(5);
for(int i=0; i<arr.length; i++)
{
arr[i].f(2);
System.out.print(arr[i] + " ");
}
}
最初の印刷後に結果が3
そうではない理由を理解しようとしています1
最初にClass A
空のコンストラクターがそう呼ばれ、そう呼ばれる_x = 1
よりもそう呼び出され、呼び出し後==> 1f(int x) from class B
_x = _x - 2
_x = -1
Super.f(x)
_x = _x + x