假设有三个类A,B和C. C扩展B和B扩展A.我们可以直接调用A类构造函数而不调用子类C中的B类构造函数吗?
答案 0 :(得分:3)
没有。子类的构造函数将显式或隐式调用其超类的一个构造函数来初始化自身。无论这些类与正在初始化的类的关系如何,都无法调用其他类的构造函数(初始化不同的对象除外)。
答案 1 :(得分:1)
我认为这是不可能的。 无论如何,如果C与B无关,但与A有关,为什么C首先扩展B?
您也可以尝试在A中创建一些可以从A和C的构造函数中调用的受保护方法。
如果您可以尝试描述您尝试建模的内容,也许某些替代层次结构会更合适。
答案 2 :(得分:0)
不,你不能,虽然子类的构造函数首先开始执行(当你创建它的对象时),但总是在子构造函数中调用super的无参数构造函数(除非你用参数手动调用super)等等。在这个层次结构之后,最顶层父类的构造函数虽然最后开始执行,但是先完成!
答案 3 :(得分:0)
不直接......但是可以这样做:
public class A {
A(){
....
}
}
public class B extends A {
B(){
super();
....
}
}
public class C extends B {
C(){
super();
....
}
}
// In main()
C c = new C(); // This will eventually call A's constructor