2014-11-24 63 views
1

假设有三个类A,B和C。C扩展B和B扩展A.我们可以直接调用类A的构造方法而不调用类B的构造方法在子类C?我们可以在java中的多级继承中调用第2个子类中的超类构造函数:

+1

你为什么不只是尝试,并找出? – tnw 2014-11-24 17:18:24

+1

当然。 'new A();' – kolossus 2014-11-24 17:18:30

+1

不,总是调用一个(可能是隐式的)超级构造函数,然后所有的字段都被初始化,剩下的部分从构造函数中执行。 – 2014-11-24 17:20:15

回答

3

否。子类的构造函数将显式或隐式地调用其超类的构造函数之一来初始化自身。其他类的构造函数不能被调用(除了初始化不同的对象),无论这些类与要初始化的类的关系如何。

1

我不认为这是可能的。 无论如何,如果C不涉及B,而是涉及A,为什么C首先扩展B?

您也可以尝试在A中创建一些可以从A和C的构造函数中调用的受保护的方法。

如果你可以尝试描述你想要建模的东西,也许一些替代层次结构更合适。

+0

+一个用于提问者描述问题的建议。没有一个具体的例子,就不可能真正讨论问题和解决方案。 – ajb 2014-11-24 17:28:38

0

不,你虽然子类的构造函数首先开始执行(当你创建它的对象时),但在子构造函数中总是有一个无参数构造函数调用super(除非你手动调用super参数)等。遵循这个层次结构,最顶层父类的构造函数虽然最后开始执行,但是先完成!

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 
相关问题