у меня есть это 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 3 6, и я удивляюсь, почему третья итерация 6
Используйте отладчик. –
Не могли бы вы сделать целый пример несколько разумным? Я не против читать код, который сам по себе совершенно ошеломляет, однако чтение полуобпущенных имен переменных/классов быстро раздражает. Также добавьте теги @ @ Override. – skiwi
Просто просмотрите код в своем уме ... Когда вы не вызываете супер-конструктор, вызывается пустой супер-конструктор. – Matthias