如何使用不同的构造函数扩展类?

时间:2016-07-18 07:39:51

标签: java constructor

我很难将一个人课程扩展到患者班级

我有一个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)。 我可以看出为什么会这样,但是无法看到如何扩展患者的人员类别。

3 个答案:

答案 0 :(得分:4)

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

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

这些方法必须是静态的,因为否则它们被调用的this在被调用时尚未构建。

答案 1 :(得分:2)

您可以在class Program { static void Main( string[] args ) { PrintColoredString( "First", "firstString", ConsoleColor.Green ); PrintColoredString( "second", "secondString", ConsoleColor.Cyan ); Console.ResetColor(); Console.ReadKey(); } private static void PrintColoredString(string key, string value, ConsoleColor color) { Console.ForegroundColor = color; Console.Write( "{0} {1} ", key, value ); } }

中拥有默认构造函数
Person

或者

您需要使用public Person() { } 方法将构造函数调用Person类作为其2-arg构造函数

super

答案 2 :(得分:2)

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

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()调用超类的构造函数(该类继承的类)。