Использование метода toString () из дочернего класса - PullRequest
0 голосов
/ 04 февраля 2019

Привет! Я пишу код, используя полиморфизм, и я хотел бы напечатать List на экране, но когда я использую свой код, он запускает метод toString только из родительского класса.Как я могу это исправить?

общедоступный класс HospitalApp {

public static void main(String[] main){

    Hospital hospital = new Hospital();

    List<Person> lista = new ArrayList<>();

    lista = hospital.showList();


    StringBuilder stringBuilder = new StringBuilder();

    for(Person person : lista){
        stringBuilder.append(person);
        stringBuilder.append("\n");
    }
    System.out.println(stringBuilder.toString());
}   

}


общедоступный класс Hospital {

List<Person> lista = new ArrayList<>();
Person doktor = new Doctor("All", "Bundy",100, 99999);
Person nurse = new Nurse("Iga", "Lis",160, 10);
Person nurse_1 = new Nurse("Magda", "Andrych",160, 20);

public List showList(){
    lista.add(doktor);
    lista.add(nurse);
    lista.add(nurse_1);
    return lista;
}

}


публичный класс Person {

private String imie;
private String nazwisko;
private double wyplata;

public Person(){}

public Person(String imie, String nazwisko, double wyplata){
    this.imie = imie;
    this.nazwisko = nazwisko;
    this.wyplata = wyplata;
}

public void setImie(String imie){
    this.imie = imie;
}

public String getImie(){
    return imie;
}


public void setNazwisko(String nazwisko){
    this.nazwisko = nazwisko;
}

public String getNazwisko(){
    return nazwisko;
}


public void setWyplata(double wyplata){
    this.wyplata = wyplata;
}

public double getWyplata(){
    return wyplata;
}


public String toString(){
return  getImie() + " " + getNazwisko() + " " + getWyplata();
}

}


Public Class Медсестра расширяет Person {

private int nadgodziny;

public Nurse(){}
public Nurse(String imie, String nazwisko, double wyplata, int nadgodziny){
    super(imie, nazwisko, wyplata);
    this.nadgodziny = nadgodziny;
}


public void setNadgodziny(int nadgodziny){
this.nadgodziny = nadgodziny;
}

public int getNadgodziny(){
    return nadgodziny;
}

@Override
String toString(){
return  getImie() + " " + getNazwisko() + " " + getWyplata() + " " + getNadgodziny();
}

}


Публичный класс Доктор расширяет Лицо {

private double premia;


public Doctor(){}

public Doctor(String imie, String nazwisko, double wyplata , double premia){
    super(imie, nazwisko, wyplata);
    this.premia = premia;
}


public double getPremia(){
    return premia;
}

public void setPremia(double premia){
    this.premia = premia;
}

@Override
String toString(){
return  getImie() + " " + getNazwisko() + " " + getWyplata() + " " + getPremia();
}

}

Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

вероятно, вам следует добавить в список не Person (объект), а значение, возвращаемое его методом toString: for(Person person : lista){ stringBuilder.append(person.toString); stringBuilder.append("\n"); }

0 голосов
/ 04 февраля 2019

Проблема заключается здесь, в классах Person и Doctor:

@Override
String toString(){
    return  ...;
}

, вам не хватает спецификатора public.Об этом должно быть сообщение об ошибке / предупреждение.Примените его к сигнатурам метода, и ваш код будет работать так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...