【问题标题】:Constructor Overriding in JavaJava中的构造函数重写
【发布时间】:2014-01-03 14:08:17
【问题描述】:

我们可以在同一个类的子类中重写超类的构造函数吗? 如果是,如何? 如果不是,为什么?

class Super{}
class Sub extends Super
{
    //write code, if yes
}

【问题讨论】:

    标签: java inheritance constructor overriding


    【解决方案1】:

    ,您不能覆盖Super 类的constructorJVM 在创建子类实例时肯定会调用超类构造函数。因此,每当您创建一个子类实例时,它都会调用基类构造函数,然后继续使用子类构造函数语句Constructors 不是 Methods 可以覆盖

    【讨论】:

      【解决方案2】:

      我们可以在同一个类的子类中重写超类的构造函数吗?

      没有。

      通过继承,您只能获取/获取实例成员。构造函数不是类的成员。 Jvm 特别对待它来构造一个对象。您可以通过查看字节码指令来检查。

      ovveriding,你实现了什么?构造函数必须构造当前对象。

      【讨论】:

        【解决方案3】:

        构造函数不能被覆盖。构造函数的概念是创建一个类的实例,该行为只属于该类,不能被覆盖。

        【讨论】:

          【解决方案4】:

          您可以在某种程度上覆盖构造函数。您实际上无法覆盖其中一个,但您可以获得一些相同的结果。

          当您在子类中指定构造函数时,您可以随意构建它。然后,该构造函数可以选择调用哪个 super() 构造函数。

          所以你可以阻塞一些子构造函数,你可以修改它们的参数等等。唯一的限制是至少一个超级构造函数必须被调用。

          A {  A(int i) {} A(String b) }
          
          B extends A { B(int i) { super(i); doStuff() } }
          
          C extends A { C(String b) { super(Integer.parseInt(b)) } }
          

          所以我们有一个类A 有两个构造函数。

          另一方面,B 类没有 String 构造函数,并且在超级构造函数发生后做了额外的事情。

          C 类没有 int 构造函数 - 但是当您在 C 中调用 String 构造函数时,它实际上会转到 A 中的 int 构造函数。

          【讨论】:

          • 这与调用无关,OP 想要覆盖它。我可能错了,请交叉检查一次。
          • 构造函数只在你构造类的时候被调用。您不能完全替换超级构造函数的行为(因为必须调用一个) - 但您可以通过限制可以调用哪些超级构造函数、如何调用它们以及调用它们时会发生什么来修改行为。
          【解决方案5】:

          当你构造一个对象时,任何父构造函数都会在特定于该对象的构造函数之前被调用。您无法更改此行为。

          但是,有可能在不调用任何构造函数的情况下创建一个对象。之后,当然,您可以执行所需的任何初始化。

          您可以使用objenesis 为您创建对象。这是相当低级的东西;在字节码级别操作。

          请注意,您不能使用反射来做到这一点。

          【讨论】:

            【解决方案6】:

            覆盖定义了与参数类型相同的名称,构造函数覆盖在父类和子类中定义了相同的命名构造函数,它定义了相同的命名父类和子类,这是不可能的..所以不,我们不能做构造函数覆盖,因此我们可以做构造函数重载。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-12-02
              • 1970-01-01
              • 2012-03-06
              • 2011-03-22
              • 1970-01-01
              • 2010-09-25
              • 2021-07-24
              • 1970-01-01
              相关资源
              最近更新 更多