Массив экземпляров суперкласса - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть домашнее задание, которое я пытаюсь выполнить, но пока я не могу найти решение, моя проблема заключается в следующем:

У меня есть Суперкласс, который расширяется на классы Студент и Сотрудник.У человека есть поля имя, возраст, мужчина, затем у ученика есть балл, а у сотрудника зарплата.Для всех классов у меня есть метод для печати информации для объектов.Пример для Person:

void showPersonInfo () {

    System.out.println( this.getClass().getSimpleName() + " name: " + this.name);
    System.out.println(  this.getClass().getSimpleName() +" age : " + this.age);
    System.out.println(isMale ?  this.getClass().getSimpleName() + " is male" : this.getClass().getSimpleName() + " is female");
}

и для Employee (то же самое для Student):

void showEmployeeInfo(){
    super.showPersonInfo();
    System.out.println(this.getClass().getSimpleName() + " salary per day is: " + this.daySalary);
}

Тогда у меня есть основной методв котором я должен сделать массив из 10 человек и заполнить его студентами, людьми и сотрудниками.После итерации мне нужно соответственно вызвать методы для подкласса - showEmployeeInfo для Employee и т. Д. Я думаю, что вы поняли идею.

Пока я сделал это:

for(int index = 0; index < guys.length; index++) {
            if(guys[index].getClass() == Person.class) {
                guys[index].showPersonInfo();
                System.out.println();
            } 

Я пытаюсь сделать то же самое для других классов, и мне удается найти их с помощью getClass (), но я не могу вызватьметоды подкласса.Это вообще возможно?До сих пор я пробовал некоторые вещи, но ничего не получалось. Любые идеи?

PS: я думаю, что я могу сделать все методы статичными, но я не думаю, что это должно быть решением.:)

1 Ответ

0 голосов
/ 26 ноября 2018

Отказ от ответственности: это не обязательно тот ответ, которого ожидает ваш учитель / инструктор.


Вы можете изменить имя метода showXXXInfo на просто showInfo, и использовать методы вподклассы переопределяют один в суперклассе:

// in Person
void showInfo() {

    System.out.println( this.getClass().getSimpleName() + " name: " + this.name);
    System.out.println(  this.getClass().getSimpleName() +" age : " + this.age);
    System.out.println(isMale ?  this.getClass().getSimpleName() + " is male" : this.getClass().getSimpleName() + " is female");

}

// in Employee
@Override
void showInfo(){
    super.showInfo();
    System.out.println(this.getClass().getSimpleName() + " salary per day is: " + this.daySalary);
}

Теперь вы можете просто вызвать showInfo для каждого элемента вашего массива, и в зависимости от типа будет автоматически вызван правильный метод.

...