Java子类中的错误构造函数

时间:2015-03-19 17:06:01

标签: java constructor

有人可以帮我理解为什么(在Java中)B类是正确的,而C类会抛出编译错误?

class A {
    int x = 1;
    A(int x) { this.x = x; }
}

class B extends A {
    B() { super(2); }
    B(int x) { super.x = x; } //Error
}

class C extends A {
    C() { super.x = 2; }      //Error
    C(int x) { super.x = x; } //Error
}

1 个答案:

答案 0 :(得分:4)

因为在构造函数C()中,隐式地调用了构造函数A()。除非通过调用另一个构造函数,否则无法阻止它。但构造函数A()不存在,只有A(int),因此错误。 (如果您没有编写任何其他构造函数,则默认构造函数仅隐式存在 - 只要您有另一个构造函数,就必须添加默认构造函数,否则它将不存在)。