120 likes | 269 Views
Java-Kurs - 10. Übung. Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen. Methode "super". Problem: Wiederholung der Initialisierung für Person im Konstruktor von Dozent (Unterklasse von Person )
E N D
Java-Kurs - 10. Übung • Besprechung der Hausaufgabe • Vererbung • Konstruktoren (Methode super) • Polymorphismus • Dynamisches Binden • Abstrakte Klassen
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: Beispiel class Dozent extends Person { String institut; //Konstruktor Dozent(String vorname, String nachname, String inst) { super(vorname,nachname); //Konstruktor von Person institut = inst; } }
Gerade_ Strecke Spline Kreis-bogen Dreieck Polygon Viereck Rechteck Quadrat Beispiel zur Klassenhierarchie Geometrische_Figur 2dimensionale_Figur 1dimensionale_Figur
Gerade_ Strecke Spline Kreis-bogen Dreieck Polygon Viereck Rechteck Quadrat Methoden Geometrische_Figur 2dimensionale_Figur 1dimensionale_Figur Methode zeichne()
Gerade_ Strecke Spline Kreis-bogen Dreieck Polygon Viereck Rechteck Quadrat Methoden Geometrische_Figur 2dimensionale_Figur 1dimensionale_Figur 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(); ...}
Dreieck Polygon Rechteck 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.