Java-Kurs - 10. Übung
description
Transcript of Java-Kurs - 10. Übung
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;
}
}
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