无论如何JAVA在Super Class的构造函数之前执行Sub Class的构造函数吗?

时间:2017-08-31 18:49:13

标签: java constructor subclass superclass super

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();
    }
}  

输出:
这是Super Constructor
这是Sub Constructor

无论如何要这样做?
或者你不能在Super()之前访问Sub()?
我知道Super Class或Inherited Classes首先被初始化,然后是子类,只是为了学习目的!

5 个答案:

答案 0 :(得分:2)

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

如果你看一个反编译器,你的Sub构造函数将如下所示:

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

所以不,这是不可能的。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

其他答案说不可能。不确定为什么要尝试这样做但更好地重新考虑您的实现,因为您总是希望确保继承字段首先被初始化,因为子类实现可能依赖于它。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这是一个简单的答案。 继承的概念是关于 IS-A 的关系。 从技术上讲,Dog class是Animal Class的孩子。 。 。 在创建对象时,Dog类首先是 ANIMAL ,然后才被归类为 DOG

...希望这能澄清事情。 。所以不可能按你提出的方式去做