我一直在试图围绕OOD包裹头部而感到沮丧。我试图建立一个有三个类的程序 - 一个叫Person,它有一个由个人信息组成的构造器。另一个名为Doctor的类继承了Person类,只是构造一个带有额外字段(大部分字段,即名称,地址将指向person对象)称为专业的对象。我使用另一个类来构建Java应用程序来创建,查看和修改人员和医生对象中的字段。从构造函数构造链接的Java对象
我已经构建了人员和医生类,你可以在这篇文章的底部找到他们的相关代码。当我尝试创建医生对象时,会出现问题,因为我的代码似乎在创建与人物无关的全新医生对象。我试图编辑人物对象的firstName字符串,但医生对象没有更新以反映它。它似乎创建了它自己的永久名称,而不是简单地指向person对象中定义的名称。
我通过用户输入创建人物对象并使用以下行存储它们。
persons[amountPersons] = new Person (firstName, lastName, homeAddress, phoneNumber);
amountPersons++;
一个人一旦对象被创建,用户可以输入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++;
这到底我做错了医生的对象?对大量代码表示歉意 - 我尽可能地减少了代码,但我不确定问题出在哪里,所以我只能这么做。
Person类
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'字段,而不是将其作为子类。 – Dragondraikk