繁体   English   中英

在JAVA中是否有在超类的构造函数之前执行子类的构造函数的方法?

[英]Is there anyway in JAVA to execute Sub Class's Constructor before the Super Class's Constructor?

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()之前访问Sub()?
我知道超级类或继承的类首先被初始化,然后是子类,仅出于学习目的而这样做!

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

如果使用反编译器,则Sub构造函数将如下所示:

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

所以不,这是不可能的。

它将始终始终先调用基类的构造函数(parent),然后再调用发起的类(child)。 在您的情况下, super()将首先执行。

好读: 父或子构造函数是第一个执行的?

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

如前所述,超级构造函数总是被调用。 也许您应该重写您的问题并说明原因。

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

...希望这样可以弄清楚事情。 所以不可能按照你的要求去做

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM