【发布时间】:2015-07-24 08:51:51
【问题描述】:
我一直在试图解决 OOD 问题。我正在尝试构建一个具有三个类的程序 - 一个称为 Person ,它具有一个由个人信息组成的构造函数。另一个名为 Doctor 的类继承了 Person 类,并简单地构造了一个带有额外字段的对象(大多数字段,即姓名,地址将指向人员对象)称为专业。我使用另一个类来构建 java 应用程序来创建、查看和修改人员和医生对象中的字段。
我已经构建了 person 和 Doctor 类,你可以在这篇文章的底部找到它们的相关代码。当我尝试创建医生对象时会出现问题,因为我的代码似乎正在创建一个与人员对象没有任何关系的全新医生对象。我尝试编辑人员对象的 firstName 字符串,但没有更新医生对象以反映这一点。它似乎已经创建了自己的永久名称,而不是简单地指向人员对象中定义的名称。
我通过用户输入创建人员对象并使用以下行存储它们。
persons[amountPersons] = new Person (firstName, lastName, homeAddress, phoneNumber);
amountPersons++;
一旦创建了person对象,用户可以输入personNumber并像这样创建一个医生对象
person = getPersonID(personID);
int personNumber;
String firstName = null;
String lastName = null;
String homeAddress = null;
String phoneNumber = null;
firstName = person.firstName;
lastName = person.lastName;
homeAddress = person.homeAddress;
phoneNumber = person.phoneNumber;
personNumber = person.personNumber;
System.out.print ("Enter speciality of the doctor: ");
String speciality = input.nextLine();
doctors[amountDoctors] = new Doctor (firstName, lastName, homeAddress, phoneNumber, speciality);
amountDoctors++;
我到底做错了什么?为大量代码道歉 - 我已尽我所能精简它,但我不确定问题出在哪里,所以我只能做这么多。
人物类
public class Person {
//Instance Variables
protected String firstName;
protected String lastName;
protected String homeAddress;
protected String phoneNumber;
protected int personNumber;
private static int NumberSystem = 1;
public Person()
{
firstName = " ";
lastName = " ";
homeAddress = " ";
phoneNumber = " ";
personNumber = 0;
}
public Person (String firstName, String lastName, String homeAddress, String phoneNumber)
{
// Initialize instance variables
this.firstName = firstName;
this.lastName = lastName;
this.homeAddress = homeAddress;
this.phoneNumber = phoneNumber;
personNumber = NumberSystem;
NumberSystem = NumberSystem + 1;
}
public String toString()
{
String p;
p = "=================================================" +"\n" +
"Identification Number: " + personNumber +"\n" +
"Name: " + firstName +"\n" +
"Surname: " + lastName +"\n" +
"Address: " + homeAddress +"\n" +
"Mobile/Telephone: " + phoneNumber +"\n";
return p;
}
医生
public class Doctor extends Person{
// the aim of Doctor subclass is to simply add a speciality field
private String speciality;
int doctorID;
public Doctor() {
doctorID = 0;
speciality = "none";
}
public Doctor(String firstName, String lastName, String homeAddress, String phoneNumber, String speciality) {
super(firstName, lastName, homeAddress, phoneNumber);
this.speciality = speciality;
}
public String toString()
{
String d;
d = "=================================================" +"\n" +
"Doctor Number: " + doctorID +"\n" +
"Person Number: " + personNumber +"\n" +
"Name: " + firstName +"\n" +
"Surname: " + lastName +"\n" +
"Address: " + homeAddress +"\n" +
"Mobile/Telephone: " + phoneNumber +"\n" +
"Speciality: " + speciality +"\n";
return d;
}
}
【问题讨论】:
-
听起来你不是在寻找继承,而是在寻找组合。目前,当您拥有
Doctor时,它也是Person,这意味着您可以在任何可以使用Person的地方使用它。不过,这不会将其链接到任何其他Person对象。为此,您需要使Doctor具有Person字段,而不是使其成为子类。
标签: java arrays object inheritance polymorphism