Java dziedziczenie

0

Na wstępie przepraszam, jeśli to zły dział/forum.
Uczę się Javy i staram się zrozumieć obiektowość. Utknąłem na dziale "dziedziczenie". Wg teorii ten kod powinien działać, ale niestety coś jest nie tak. Czy ktoś może mi pomóc?
Klasa Owoc
[code]
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package pl.dudeck.www;

/**
*

  • @Author Mati
    */
    public class Owoc {
    protected String nazwa;
    protected String kolor="czerwony";
    protected String ksztalt="owalny";
    protected int rozmiar;
    protected boolean swiezosc=true;

Owoc(){

}

Owoc(String naz, String kol, String kszt, int roz, boolean swiez){
this.nazwa = naz;
this.kolor=kol;
this.ksztalt=kszt;
this.rozmiar=roz;
this.swiezosc=swiez;
}

public String wypisz(){
return (nazwa+" jest koloru "+kolor+" kształt "+ksztalt+" rozmiar "+rozmiar+" i jest "+swiezosc);
}

public void losuj(){
System.out.println((Math.random() < 0.5) ? "Prawda" : "Fałsz!");
}
}
[/code]

Klasa Warzywo dziedzicząca po Owoc
[code]
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package pl.dudeck.www;

/**
*

  • @Author Mati
    */
    public class Warzywo extends Owoc{
    private int ciezar;

    Warzywo(String naz, String kol, String kszt, int roz, boolean swiez, int ciez){
    super.nazwa = naz;
    super.kolor=kol;
    super.ksztalt=kszt;
    super.rozmiar=roz;
    super.swiezosc=swiez;
    this.ciezar=ciez;
    }

    public String wypisz(){
    return (nazwa+" jest koloru "+kolor+" kształt "+ksztalt+" rozmiar "+rozmiar+" i jest "+swiezosc+" i wazy "+ciezar);
    }
    public int oblicz(){
    return ciezar*rozmiar;
    }

}
[/code]

Klasa Main
[code]
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package pl.dudeck.www;

/**
*

  • @Author Mati
    */
    public class Main {
    public static void main(String[] args){
    Owoc ob1 = new Owoc("Jabłko", "czerwone", "okrągłe", 50, true);
    ob1.wypisz();
    ob1.losuj();
    Warzywo ob2 = new Warzywo("Jabłko", "czerwone", "okrągłe", 50, true, 500);
    ob2.wypisz();
    ob2.oblicz();

}
}
[/code]

0

A co jest nie tak?

0

Wyświetla mi tylko słowo Prawda lub Fałsz, a powinno jeszcze stringi obiektów z metody wypisz i wyniki dwóch innych metod (oblicz i losuj).

0

Rzeczywiście nie rozumiesz sensu dziedziczenia. Skoro Warzywo rozszerza Owoc, to można rozumieć iż warzywo jest owocem, a owoc warzywem nie jest. Dlatego cały kod jest bez sensu.
Nie wiem czy sam wymyśliłeś sobie przykład, czy z jakiejś idiotycznej stronie, ale spróbuj zrealizować coś takiego:

Masz klasę Osoba. Ma podstawowe dane: imię, nazwisko, data urodzenia.
Teraz dokładasz do tego dwie klasy: Pracownik i Klient, które rozszerzają Osobę. I pracownik i klient mają swoje identyfikatory, pracownik ma swoich klientów i pensję, a klient ma swoje zamówienia. Do tego możesz dodać Managera, który będzie rozszerzał Pracownika - będzie on miał listę podwładnych mu pracowników.

0

Po pierwsze, jak powiedział @Visher Warzywo nie powinno dziedziczyć po Owocu. Po drugie, który fragment kodu ma, Twoim zdaniem, wyświetlić wyniki dwóch innych metod? Dla ułatwienia, takiego fragmentu nie ma.

0

Wiem, że to powinno mieć inne nazwy. Powiedzmy, że klasa Owoc nazywa się Roslina. Reszta zostaje tak jak jest. Wywołuję ob1.wypisz(); ob1.losuj(); ob2.wypisz(); i ob2.oblicz();
Czy to nie powinno dać mi rezultatów? Jeśli nie to jak to poprawić?

0

Biorąc pod uwagę nazwy, zmień funkcję wypisz() na taką:

   public void wypisz(){
     System.out.println(nazwa+" jest koloru "+kolor+" kształt "+ksztalt+" rozmiar "+rozmiar+" i jest "+swiezosc);  
   }

Druga możliwość (niezbyt pasuje do nazwy wypisz), to zostawić funkcję wypisz bez zmian i wywołać
System.out.println(ob1.wypisz());

0

Dzięki wielkie! Właśnie rano sobie uświadomiłem, że powinienem był użyć println() ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1