Здесь:
public Person()
{
firstName = "";
lastName = "";
}
В вашем подклассе отсутствует разумный вызов конструктора суперкласса.Поэтому, когда вы создаете экземпляры своих объектов Patient, используется вышеуказанный конструктор, и все пациенты заканчиваются на "" в качестве имени и фамилии! *
Когда вы создаете пациента, тогда пациент должен иметь имя тоже!Но ваш конструктор в Patient устанавливает только поля, связанные с пациентом.И неявно, супер конструктор по умолчанию называется.Поэтому все поля Person должны быть пустыми строками!
Гораздо лучший подход будет выглядеть так:
class Person {
private final String firstName;
... lastName
public Person(String firstName, String lastName) {
this.firstName = firstName;
...
, а затем
class Patient extends Person {
private final int patientID;
public Patient(int patientID, String firstName, String lastName) {
super(firstName, lastName);
this.patientID = patientID;
)
Почему это так?лучше: имена и идентификаторы не меняются (обычно).Нет смысла иметь добытчиков для них.Вы создаете свой объект один раз, и тогда эти данные исправляются!Существует также нет смысла иметь этот конструктор по умолчанию в Person.Человек с пустыми именами не имеет смысла.Таким образом: не создавайте класс, который позволяет вам создавать «недопустимые» объекты.Ваши занятия модель реальность.Нет настоящих людей без имен!
И еще один совет: используйте @Override при переопределении методов, чтобы компилятор мог сообщить вам, когда вы что-то не так! *