java - 调用抽象类的构造函数

标签 java inheritance

假设我有以下类结构:

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

abstract class B extends A{

}

public class C extends B{
    C(int a){
        super(a);
    }
}

这段代码在 myMethod 不会调用 A 的构造函数的意义上是无效的。有办法做到这一点吗?

我最终想做的是在不影响其功能的情况下向一组类添加功能。所有这些类目前都扩展了一个公共(public)类 (runtimeException),因此我正在考虑添加一个中间抽象类。

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

最佳答案

您将无法像您写的那样声明类 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();
    }
}

换句话说,你总是调用“上一层”的构造函数,不管这个类是不是抽象类。

为了避免这个奇怪的数字 10 我写了并且缺少 C 构造函数的 int 参数,我建议添加到子类构造函数 < strong>至少任何extends类对的父类构造函数所需的所有参数。

关于java - 调用抽象类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23891087/

相关文章:

java - 为什么我传递参数时是无效的方法声明?

python - 如何创建从外部库中的 sqlalchemy 模型继承的自定义类

java - 如果公共(public)成员访问私有(private)成员,则不继承私有(private)成员

当基类具有两个或多个模板参数时,c++11 别名基模板类变量在模板派生类中不起作用

java - 用预期结果计算 Java 中 byte[] 的校验和

java - 从 MS Access 输出获取 Unicode 数据将为 "???????????????????"

java - 我想添加一个状态栏,该状态栏应出现在显示器屏幕的底部,随显示器尺寸的变化而变化

java - 如何计算排序链表(数字)上的频率 Java

oop - 如何在 Dart 中定义接口(interface)?

c++ - 从派生类创建复制构造函数和赋值运算符