有没有在JAVA中执行超类的构造函数之前的子类的构造函数?

问题描述:

class Super 
{ 
    Super() 
    { 
     System.out.println("This is Super Constructor"); 
    } 
} 
class Sub extends Super 
{ 
    Sub() 
    { 
     //super() is automatically added by the compiler here! 
     System.out.println("This is Sub Constructor"); 
     //super(); I can't define it here coz it needs to be the first statement! 
    } 
} 
class Test 
{ 
    public static void main(String...args) 
    { 
     Sub s2=new Sub(); 
    } 
} 

输出:
这是超级构造
这是子构造有没有在JAVA中执行超类的构造函数之前的子类的构造函数?

反正这样做?
或者你不能在Super()之前访问Sub()?
我知道超类或继承类首先被初始化,然后是子类,只是为了学习的目的而做这个!

+0

如果你想要做到这一点,那么你需要检查你的对象模型。在这种情况下,您可能会错误地使用父子关系。 – Amit

继承人一个简单的答案。 继承的概念是关于关系。 从技术上讲,狗类是动物类的孩子。 。 。 在创建对象,狗类,首先是一个动物在其成为列为DOG

...希望这clearifies事情。 。所以它不可能按照你询问的方式来执行

在构造函数中,如果您自己没有提供此调用,编译器将始终为您添加对super() 的调用。

如果用反编译一下,你的子构造函数将是这样的:

Sub() 
{ 
    super(); 
    System.out.println("This is Sub Constructor"); 
} 

所以,不,这是不可能的。

它将始终首先调用基类构造函数(父),然后调用启动类(child)。在你的情况下,super()将首先执行。

好读:Which executed first, The parent or the child constructor?

至于其他的答案说是不可能的。不知道你为什么试图做到这一点,但更好地重新考虑你的实现,因为你始终想确保继承的字段被初始化,因为子类实现可能依赖于它。

+0

欢迎来到堆栈溢出!此答案不会添加任何尚未在其他答案中提供且具有较少细节的新信息。请注意发布无益的答案 – Milk

如上所述,超级构造函数总是被调用。也许你应该重写你的问题并解释,为什么你需要这个。