【问题标题】:Is there anyway in JAVA to execute Sub Class's Constructor before the Super Class's Constructor?JAVA中是否有在超类的构造函数之前执行子类的构造函数?
【发布时间】:2017-08-31 18:49:12
【问题描述】:
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()?
我知道先初始化超类或继承类,然后再初始化子类,这样做只是为了学习目的!

【问题讨论】:

  • 如果您想要执行此操作,那么您需要查看您的对象模型。在这种情况下,您可能会错误地使用父子关系。

标签: java constructor subclass superclass super


【解决方案1】:

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

如果您使用反编译器查看,您的 Sub 构造函数将如下所示:

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

所以不,这是不可能的。

【讨论】:

    【解决方案2】:

    它总是先调用基类构造函数(parent),然后调用初始化类(child)。在您的情况下,super() 将首先执行。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 欢迎来到 Stack Overflow!此答案不会添加其他答案中尚未提供的任何新信息,并且细节较少。请注意发布无用的答案
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-25
          • 1970-01-01
          • 2018-06-06
          • 1970-01-01
          • 2018-03-29
          • 1970-01-01
          • 1970-01-01
          • 2014-11-06
          相关资源
          最近更新 更多