Java-Kurs - 10. Übung• Besprechung der Hausaufgabe
• Vererbung• Konstruktoren (Methode super)• Polymorphismus• Dynamisches Binden• Abstrakte Klassen
Hausaufgabe 8• Ergänzen Sie die vorgestellten Klassen „Person“
und „Student“ um die Unterklassen „Dozent“ und „Verwaltungsangestellter“. Die Unterklasse „Dozent“ soll dabei noch weiter in „Professor“ und „Assistent“ unterschieden werden.
Erzeugen Sie ein Objekt jeder Klasse.
Methode "super"• Problem: Wiederholung der Initialisierung für Person im
Konstruktor von Dozent (Unterklasse von Person)
• Sinnvoll: Nutzung des Konstruktors von Person im Konstruktor von Dozent
• Methode super dient zum Aufruf des Konstruktors der Oberklasse
Methode super: Beispielclass Dozent extends Person {
String institut;
//Konstruktor
Dozent(String vorname, String nachname, String inst)
{
super(vorname,nachname); //Konstruktor von Person
institut = inst;
}
}
Beispiel zur Klassenhierarchie
1dimensionale_Figur
Geometrische_Figur
Gerade_ Strecke
2dimensionale_Figur
Spline Kreis-bogen
Dreieck Viereck
Rechteck
Quadrat
Polygon
Methoden
1dimensionale_Figur
Geometrische_Figur
Gerade_ Strecke
2dimensionale_Figur
Spline Kreis-bogen
Dreieck Viereck
Rechteck
Quadrat
Polygon
Methode zeichne()
Methoden
1dimensionale_Figur
Geometrische_Figur
Gerade_ Strecke
2dimensionale_Figur
Spline Kreis-bogen
Dreieck Viereck
Rechteck
Quadrat
Polygon
Methode umfang()
Polymorphismus• Eine Klassenvariable kann Objekte von Unterklassen aufnehmen• Beispiel (Geometrische Figuren):Geometrische_Figur g1, g2;g1 = new Dreieck();g2 = new Quadrat();
• Es können nur die Methoden der Klassenvariablen aufgerufen werden:g1.zeichne(); //aus Geometrische_Fig.g1.umfang(); //geht nicht; nur bei 2D
Polymorphismus• Eine Klassenvariable kann keine Objekte von Oberklassen aufnehmen• Beispiel:Quadrat q;q = new Geometrische_Figur();//Fehlerq.umfang(); //Fehler
• Für q ist der Aufruf q.umfang() zulässig, umfang() gibt es aber bei Geometrische_Figur nicht.
Dynamisches Binden
• Bei Polymorphismus wird erst zur Laufzeit entscheiden, welche Methode verwendet wird
• Beispiel:Geometrische_Figur[] g = new...; g[0] = new Dreieck();g[1] = new Quadrat();g[2] = new Rechteck(); ...;for(int i = 0; i < n ; i = i+1){ g[i].zeichne(); }
Abstrakte Klassen• Problem I:Geometrische_Figur g;g = new Geometrische_Figur();
• Problem II: Wie ist zeichne() in Klasse Geometrische_Figur implementiert?
• Lösung: Abstrakte Klassen• Es dürfen keine Instanzen erzeugt werden• Hat mindestens eine abstrakte Methode (Methode ohne
Implementierung)• Abstrakte Methode muss in Unterklasse implementiert sein
Abstrakte Klassen: Syntax
abstract class Geometrische_Figur{.....abstract void zeichne();...
}
Hausaufgabe 9• Implementieren Sie die drei Klassen Polygon, Dreieck und
Rechteck aus dem UML-Diagramm. Polygon soll eine Abstrakte Klasse sein.
• Erweitern Sie jede der drei Klassen um die Methode umfang(). Diese ist bei Polygon abstrakt.
• Erzeugen Sie ein Array, das Dreiecke und Rechtecke enthält. • Berechnen Sie die Summe der Umfänge aller Dreiecke und
Rechtecke im Array.
Dreieck Rechteck
Polygon