【发布时间】:2014-02-08 23:57:49
【问题描述】:
我有这两个课程:
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标签。 -
把脑子里的代码过一遍就好了……不调用超级构造函数的时候,调用的是空的超级构造函数。
-
把每一步都写在纸上。请记住,如果构造函数没有显式调用 super(),它要做的第一件事就是调用不带参数的超级构造函数。
-
@JB Nizet,除非你用参数调用其他一些超级构造函数。
-
是的,当然。解决了这个问题。
标签: java inheritance