假设我有以下类结构:
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/