Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super)...

Preview:

Citation preview

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

Recommended