Poliformizn

P1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Musze zrobic klasy zeby ten program:

Kopiuj
public class Main {

  public static void main(String[] args) {
    Pacjent[] pacjenci = { new ChoryNaGlowe("Marian"),
                           new ChoryNaNerki("Janusz"),
                           new ChoryNaBrzuch("Marek")
                         };

    for (Pacjent p : pacjenci) {
      System.out.println("Pacjent:     " + p.nazwisko() + '\n' +
                         "Chory na:    " + p.choroba() + '\n' +
                         "Lekarstwo: " + p.leczenie() +"\n\n"
                         );
    }
  }
} 

wyniku podawal następujący wydruk:

Pacjent: Marian
Chory na: glowe
Lekarstwo: aspiryna
Pacjent: Janusz
Chory na: Nerki
Lekarstwo: costam
Pacjent: Marek
Chory na: Brzuch
Lekarstwo: węgiel

metody choroba() i lekarstwo() muszą być wywoływane polimorficznie. Nie wiem o co chodzi z tym polimorfizmem czytalem o nim ale nadal pustka.

krzysiek050
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1272
2

Ah, te akademickie przykłady :D.

Kazda klasa ChoryNaXXX musi implementować interfejs z tymi dwoma metodami. Póżniej używając referencji tego interfejsu możesz bez znajomości dokładnego typu ustalić opis choroby i potencjalne lekarstwo.

  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 158
0
Piotr17 napisał(a):

metody choroba() i lekarstwo() muszą być wywoływane polimorficznie. Nie wiem o co chodzi z tym polimorfizmem czytalem o nim ale nadal pustka.

proponuję żebyś dodał metodę info() do wypisywania informacji o pacjencie, i jakieś wartości domyślne choroby i lekarstwa, wtedy lepiej będzie widać:

Kopiuj
class Pacjent {
 String choroba() {
  return "Głupota";
 }

 String leczenie() {
  return "Brak";
 }

 String info() {
  return "Pacjent:      " + this.nazwisko() + "\n" +
         "Chory na:     " + this.choroba() + "\n" +
         "Lekarstwo:    " + this.leczenie() + "\n";
 }
}

class ChoryNaGlowe extends Pacjent {
 String choroba() {
  return "głowa";
 }

 String leczenie() {
  return "aspiryna";
 }
}

teraz wywołanie

Kopiuj
 public static void main(String[] args) {
  Pacjent p1 = new Pacjent("Ala");
  Pacjent p2 = new ChoryNaGlowe("Bob");

  System.out.println(p1.info());
  System.out.println(p2.info());
 }

zwróci

Kopiuj
Pacjent:        Ala
Chory na:       Głupota
Lekarstwo:      Brak

Pacjent:        Bob
Chory na:       głowę
Lekarstwo:      aspiryna

zauważ, że w drugim przypadku metoda info(), pomimo, że jest zdefiniowana w klasie bazowej Pacjent, wywołuje nadpisane metody choroba() i leczenie() z klasy potomnej - to jest właśnie polimorfizm.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.