【问题标题】:How to extend a class with a different constructor?如何使用不同的构造函数扩展类?
【发布时间】:2016-07-18 07:39:51
【问题描述】:

我在将人员类扩展到患者类时遇到困难

我有一个 Person 类,它的构造函数看起来像

  public Person(String firstname,String surname) {
        fFirstname=firstname;
        fSurname=surname;
    }

然后我有一个病人类

公共类病人扩展人

我想为一个看起来大致像这样的病人创建一个构造函数

public Patient(String hospNumber) {
    fFirstname = lookup(hospNumber,"firstname");
    fSurname = lookup(hospNumber,"surname");
}

但是,我收到 Patient 构造函数需要 (String,String) 的投诉。 我知道这是为什么,但看不到如何为患者扩展 person 类。

【问题讨论】:

    标签: java constructor


    【解决方案1】:

    只需将这两个方法调用的结果传递给super 构造函数即可:

    public Patient(String hospNumber) {
        super(lookup(hospNumber,"firstname"), lookup(hospNumber,"surname"));
    }
    

    这些方法必须是静态的,因为当它们被调用时,它们原本会被调用的 this 尚未构造。

    【讨论】:

    • 我试过了,但是在 super(fFirstname,fSurname) 之前有两行创建 fFirstname 和 fSurname,这会产生一个错误,说 super 必须是第一行。你的建议很好用。谢谢
    • @TonyWolff super 必须始终是第一行。
    【解决方案2】:

    您可以在Person 类中使用默认构造函数

    public Person() {
    
    }
    

    或者

    您需要使用 super 方法调用 Person 类的构造函数作为其 2-arg 构造函数

    public Patient(String hospNumber) {
        super(lookup(hospNumber,"firstname"), lookup(hospNumber,"firstname"));
    }
    

    【讨论】:

      【解决方案3】:

      将患者构造函数更改为此。

      public Patient(String hospNumber) {
         super(lookup(hospNumber,"firstname"), lookup(hospNumber,"surname"));
      }
      

      但是lookup 方法需要是静态的才能做到这一点。 否则,您将不得不将其更改为:

      public Patient(String hospNumber, String firstname, String surname) {
        super(firstname,surname);
      }
      

      或类似的东西。

      最后,您还可以向 Person 类添加另一个构造函数。像Person() 和稍后设置其余的细节。这样,您甚至不必在患者的构造函数上编写 super()。

      旁注: 一个类可以有多个构造函数,只要它们没有相同的参数。

      super() 调用超类(该类继承自该类)的构造函数。

      【讨论】:

        猜你喜欢
        • 2013-11-15
        • 2021-02-13
        • 2019-09-15
        • 2018-09-26
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 2015-06-02
        相关资源
        最近更新 更多