9.6 Übungen

Duke als Boxer

9.6.1 Haustierpolymorphismus

Haustierklassen

Klasse Haustier

  • abstrakte Klasse
  • Attribute
    • privat: name
    • privat: steuerpflichtig
    • privat: jahreskostenTierarzt
  • Methoden
    • Lese und Schreibmethode für Namen
    • Lesemethode für Steuerpflicht
    • Konstruktor der Namen, Steuerpflicht und Jahreskosten Tierarzt erfasst
    • Methode beschreibung() Typ String. Gibt Text mit Namen und eventueller Steuerpflicht zurück.

Klasse Hund

  • abgeleitet aus Haustier
  • Hunde sind steuerpflichtig
  • privates Attribut: rasse
  • Methoden
    • Konstruktor der Namen, Jahreskosten Tierarzt und Rasse erfasst
    • Lesemethode für Rasse
    • Überschriebene Methode beschreibung() die zusätzlich hundespezifische Daten zurück gibt

Klasse Katze

  • abgeleitet aus Haustier
  • Katzen sind nicht steuerpflichtig
  • privates Attribut: lieblingsVogel (Referenz auf Vogel)
  • Methoden
    • Konstruktor der Namen des Katze, Jahreskosten Tierarzt und die Referenz des Lieblingsvogels erfasst
    • vogel() Ausgabe ist der Name des Vogels als Zeichenkette
    • Überschriebene Methode beschreibung() die zusätzliche katzenspezifische Daten zurück gibt.
    • setzen des Lieblingsvogelattribut

Klasse Vogel

  • abgeleitet aus Haustier
  • Vögel sind nicht steuerpflichtig
  • privates Attribut: singvogel (boolscher Wert)
  • Methoden
    • Konstruktor der Namen des Vogels, JahresKosten Tierarzt und Singvogeleigenschaft erfasst
    • Lesemethode für Singvogeleigenschaft
    • Überschriebene Methode beschreibung() die zusätzliche vogelspezifische Eigenschaften ausgibt

Klasse TierTest

Schreiben Sie ein Hauptprogramm das folgende Aufgaben ausführt:

  • Verwaltung von mindestens 2 Haustieren pro Tierart einem gemeinsamen statischen Feld vom Typ Haustier
  • Methoden
    • populate(): Anlegen von mindestens 2 Tieren pro Tierart im statischen Haustierfeld
    • neuerLieblingsvogel(): Benutzen Sie einen zweiten Vogel, der aus dem Haustierfeld geholt und weisen Sie ihn einer Katze aus dem Haustierfeld zu
      • prüfen Sie vor den Zuweisungen, dass Sie eine Katze, beziehungsweise einen Vogel aus dem Feld ausgelesen haben
    • iterate(): Itererieren über das Feld und folgende Information ausdrucken
      • Typ des Tieres
      • Inhalt von beschreibung()
      • Summerien Sie die Tierarztkosten auf und geben Sie sie am Ende aus.
  • Benutzen Sie den unten angebenen Rumpf für Ihre Implementierung
 

package s1.block9;

public class TierTest {
    private static Haustier hausTiere[];
    public static void main(String[] args) {
        populate();
        neuerLieblingsvogel();
        iterate();
    }

    public static void populate() {
        hausTiere = new Haustier[6];
        /* Implementierung */
    }

    public static void neuerLieblingsvogel() {
        /* Implementierung */
    }

    public static void iterate() {
        /* Implementierung */
    }
}
 

Optional

Versuchen Sie eine Zuweisung einer Referenz eines inkompatiblen Typen als Lieblingvogel zu einer Katze. Die Routine soll durch casten übersetzen. Zur Laufzeit soll die Zuweisungweisungsmethode der Katze den Fehlversuch auf der Konsole dokumentieren

Tipp:

Die Methode .getClass() der Klasse Object liefert eine Referenz auf die Beschreibung der Klasse. Man kann diese Referenz direkt ausdrucken. Es wird der Name der Klasse inklusive eventueller Paketzugehörigkeit ausgedruckt.

Will man nur den Klassennamen ausdrucken, muss man von einer Instanz vom Typ Class die Methode .getSimpleName()aufrufen.