class A{
    A(int x){}
}
class B extends A{
    B(int x){}
    public static void main(String args[]){
         B b = new B(10);
    }
}
我理解这会抛出一个错误(B的一个arg构造函数,隐式调用super(),因此A)不存在default-arg构造函数.我很好奇为什么B的一个arg构造函数,不使用super(x)来调用类A的一个arg构造函数.相反,让我陷入为A明确写一个无参数构造函数的麻烦,当我不需要一个!
Ada*_*kin 11
您可以像这样重写B类:
class B extends A{
    B(int x) {
        super(x);
    }
}
这将做你想要的.它不是隐式发生的,因为A中可能有很多不同的构造函数(在你的例子中没有,但可能存在),并且它不知道哪一个是正确的.如果你有一个长度和宽度的类,由于某种原因覆盖了一个带宽度和高度的类,该怎么办?您不希望Java仅仅因为参数的类型匹配而自动调用超类构造函数.您可能需要编译错误,强制您使用适当/正确的参数显式调用超类构造函数.