【发布时间】:2018-10-12 13:21:00
【问题描述】:
以下代码将输出打印为 40 而不是 30。我无法找出解决方案。请帮忙写代码。
class Base {
int value = 0;
Base() {
addValue();
}
void addValue() {
value += 10;
}
int getValue() {
return value;
}
}
class Derived extends Base {
Derived() {
addValue();
}
void addValue() {
value += 20;
}
}
public class Test{
public static void main(String[] args) {
Base b = new Derived();
System.out.println(b.getValue());
}
}
Derived 构造函数中的隐式超级引用调用Base 构造函数,后者又调用Base 类中的方法addValue() 导致值变量为10,然后Derived 类中的addValue() 应将值加20 10.
所以最终输出是30。
但代码打印的是 40。
【问题讨论】:
-
(我知道这在 C++ 中是不同的,它不会遵循构造函数对更多派生类的覆盖,因为更多派生类不会被初始化。)
-
请为您的问题选择一个答案,以便其他人可以轻松找到它。
-
@TomHawtin 你是说同样的 C++ 代码会输出 30 吗?在那种情况下,我绝对可以看到混乱来自哪里。
-
@BrandonG 是的。 (刚刚尝试过并将其添加为答案。)
标签: java oop inheritance