1. Sie haben folgende Klassenvereinbarung:
Kann eine Klasse KleinerHund, die von der Klasse Hund abgeleitet wird, auf die
Felder gewicht und alter der Klasse Hund zugreifen? Begründen Sie bitte Ihre
Antwort.
5 Pkt.
2. Sie haben folgende Vereinbarung einer Klasse Katze:
Was geschieht, wenn Sie eine neue Instanz der Klasse Katze mit der Anweisung
Katze kleineKatze = new Katze();
erzeugen wollen? Begründen Sie bitte Ihre Antwort. 5 Pk
3. Sie haben folgende Klassenvereinbarungen:
Die Klasse KleinerHund soll auf das Feld alter der Klasse Hund zugreifen können. Welche Möglichkeiten kennen Sie, diesen Zugriff zu ermöglichen? Bewerten Sie
diese Möglichkeiten bitte auch. Achten Sie dabei besonders auf die Datenkapselung.
Ein Tipp: Sie sollten mindestens drei verschiedene Varianten nennen können. Zwei
hängen direkt mit der Vereinbarung des Feldes zusammen, die dritte dagegen nicht.
15 Pkt.
4. Betrachten Sie bitte folgendes Quelltextfragment. Es erzeugt ein Array für Instanzen
der Klasse Baer und ruft für jedes Element im Array die Methode Ausgeben()
auf.
Baer[] Baerenliste = new Baer[2];
Baerenliste[0] = new Baer(200, 3);
Baerenliste[1] = new ElternBaer(500, 5, 20);
foreach (Baer testBaer in Baerenliste)
testBaer.Ausgeben();
Die Klasse ElternBaer ist von der Klasse Baer abgeleitet und verfügt über eine
eigene Methode Ausgeben(), die die Methode Ausgeben() der Basisklasse überschreiben soll. Die Methode Ausgeben() der abgeleiteten Klasse ist nicht mit
override markiert.
Wird die Methode der Basisklasse tatsächlich überschrieben? Wie lauten die vollständigen Namen der Methoden, die in der Schleife aufgerufen werden? Geben Sie
die Namen bitte im Format <Klassenname.Methodenname> an.
Ein Tipp zur Lösung: Wenn Sie mit dem Fragment „auf dem Trockenen“ nicht zurechtkommen, bauen Sie es einfach in eines der „Bären“-Programme aus dem Studienheft ein.
10 Pkt.
5. Sie wollen eine Klasse Vogel von der Klasse Haustiere ableiten. Die Klasse
Haustiere verfügt lediglich über einen Konstruktor, der zwei int-Typen als Parameter verarbeitet. Was müssen Sie beim Konstruktor der Klasse Vogel in jedem
Fall berücksichtigen?
10 Pkt.
6. Sie haben folgende Basisklasse Insekt:
Leiten Sie aus dieser Basisklasse eine Klasse Libelle ab. Die Klasse Libelle soll
zusätzlich ein Feld fluegellaenge enthalten, das über einen Konstruktor mit einem beliebigen Wert initialisiert werden kann.
Die Methode Essen() der Klasse Libelle soll nicht nur das Gewicht und die
Länge erhöhen, sondern auch die Flügellänge.
Ändern Sie auch die Methode Ausgabe() der Klasse Libelle so, dass zusätzlich
die Flügellänge ausgegeben wird.
Stellen Sie in Ihrem Programm sicher, dass die Methoden in der Klasse Libelle die
Methoden in der Klasse Insekt in jedem Fall überschreiben.
Testen Sie Ihre neue Klasse, indem Sie eine Main()-Methode schreiben und in dieser je ein Objekt der Basisklasse und der abgeleiteten Klasse erzeugen und jeweils
beide Methoden mindestens einmal aufrufen.
55 Pkt.