13
Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Embed Size (px)

Citation preview

Page 1: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Java-Kurs - 10. Übung• Besprechung der Hausaufgabe

• Vererbung• Konstruktoren (Methode super)• Polymorphismus• Dynamisches Binden• Abstrakte Klassen

Page 2: 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.

Page 3: 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

Page 4: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Methode super: Beispielclass Dozent extends Person {

String institut;

//Konstruktor

Dozent(String vorname, String nachname, String inst)

{

super(vorname,nachname); //Konstruktor von Person

institut = inst;

}

}

Page 5: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Beispiel zur Klassenhierarchie

1dimensionale_Figur

Geometrische_Figur

Gerade_ Strecke

2dimensionale_Figur

Spline Kreis-bogen

Dreieck Viereck

Rechteck

Quadrat

Polygon

Page 6: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Methoden

1dimensionale_Figur

Geometrische_Figur

Gerade_ Strecke

2dimensionale_Figur

Spline Kreis-bogen

Dreieck Viereck

Rechteck

Quadrat

Polygon

Methode zeichne()

Page 7: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Methoden

1dimensionale_Figur

Geometrische_Figur

Gerade_ Strecke

2dimensionale_Figur

Spline Kreis-bogen

Dreieck Viereck

Rechteck

Quadrat

Polygon

Methode umfang()

Page 8: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

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

Page 9: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

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.

Page 10: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

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(); }

Page 11: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

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

Page 12: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

Abstrakte Klassen: Syntax

abstract class Geometrische_Figur{.....abstract void zeichne();...

}

Page 13: Java-Kurs - 10. Übung Besprechung der Hausaufgabe Vererbung Konstruktoren (Methode super) Polymorphismus Dynamisches Binden Abstrakte Klassen

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