【发布时间】:2017-03-18 03:57:38
【问题描述】:
我有简单的三个类:
class A {
public A(int a){ }
}
class B extends A {
public B(int b){ super(b); }
}
class C extends B {
public C(int c){ super(c); }
}
因此,类实例化期间的执行顺序是 C->B->A->B->C 并且所有对象都被正确实例化。那么问题来了:
我能否以某种方式为 C 类编写一个构造函数,如下所示:
public C(int c){
super.super(c);
}
这个想法是从 A 类调用构造函数,而不是从直接父 B 调用构造函数。这可能吗?
【问题讨论】:
-
好吧,这里没有方法被覆盖,所以只需调用
A(c)。 (我假设这是一个错字 - 请修复您的代码以实际说明您的问题)。 -
代码现在甚至无法编译,因为您没有声明构造函数 - 您声明的方法名称与类相同。
-
A 应该是构造函数,我猜。不过,OP 或许应该考虑一下他的架构。
-
继承是无条件的,所以如果你实际上并不每次都想要“B”部分,就不要扩展。创建一个直接从 A 扩展的类,如果它应该与未直接继承的其他类有共同之处,则将其放入公共
interface。不能跳过课程不是限制,这是您的设计问题。
标签: java oop inheritance constructor superclass