调用抽象类的构造函数

Nep*_*oxx 3 java inheritance

假设我有以下类结构:

public class A{
    A(int a){
        ...
    }
}

abstract class B extends A{

}

public class C extends B{
    C(int a){
        super(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

在myMethod不会调用A的构造函数的意义上,此代码无效.有没有办法做到这一点?

我最终想要做的是在不影响其功能的情况下为一组类添加功能.所有这些类当前都扩展了一个公共类(runtimeException),所以我想添加一个中间抽象类.

(编辑:C中的代码不应该是一个方法,它应该是一个构造函数)

Ale*_*lev 6

您将无法B像您所写的那样声明类.要创建一个B你需要调用A构造函数的实例:

public abstract class B extends A {
    public B() {
        super(10); //or other number
    }
}

public class C extends B {
    public C(int a) {
        super();
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,你总是调用"上一级"的构造函数,无论类是否是抽象的.

为了避免10我编写的这个奇怪的数字和缺少构造函数的int参数C,我建议至少为子类构造函数添加父类构造函数对任何extends一对类所需的所有参数.