PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs...

59
PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement • Liste für double • Liste für Studierende • Liste von Listen von int erfordern jeweils neue, fast identische Implementierung der Klassen für Elemente und Liste.

Transcript of PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs...

Page 1: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/1Stefan Dissmann

Kritische Betrachtung

Bisher implementiert:Listen für Werte des Typs intüber Elemente der Klasse intElement

• Liste für double • Liste für Studierende• Liste von Listen von int

erfordern jeweils neue, fast identische Implementierung der Klassen für Elemente und Liste.

Page 2: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/2Stefan Dissmann

Kritische Betrachtung (Fortsetzung)

Analyse:• Elemente haben immer Referenzen auf Nachfolger (und

Vorgänger).• Liste verknüpft, löscht und durchläuft immer Elemente.

• Elemente unterscheiden sich im Typ der abgelegten Werte.• Liste benötigt möglicherweise typspezifische Vergleiche.

Idee:Elemente und Liste allgemein formulieren undanschließend nur an wenigen Stellen spezialisieren.

Page 3: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/3Stefan Dissmann

Vererbung

Spezialisierung von Klassen in JAVA möglich durch

Konzept der Vererbung

Page 4: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/4Stefan Dissmann

Vererbung

Wenn eine Klasse A die Klasse B spezialisiert,also die Klasse A von der Klasse B erbt,übernimmt sie alle Attribut- und Methoden-Deklarationen von

B.

A heißt dannUnterklasse von B oder Subklasse von B

B heißt dannOberklasse von A oder Superklasse von A

Page 5: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/5Stefan Dissmann

Vererbung

Oberklasse

Unterklasse

Page 6: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/6Stefan Dissmann

Vererbung

Beispiel:

public class Person { private String name, vorname, wohnort; public Person(String n, String v, String w) { name = n; vorname = v; wohnort = w; } public String toString() { return name + ", " + vorname }}

Page 7: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/7Stefan Dissmann

Vererbung

Beispiel:

public class Person { private String name, vorname, wohnort; public Person(String n, String v, String w) { name = n; vorname = v; wohnort = w; } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person {{ private int nummer;}

Page 8: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/8Stefan Dissmann

Vererbung

Beispiel:

public class Person { private String name, vorname, wohnort; public Person(String n, String v, String w) { name = n; vorname = v; wohnort = w; } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer;}

Page 9: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/9Stefan Dissmann

Vererbung

Beispiel:

public class Person { private String name, vorname, wohnort; public Person(String n, String v, String w) { name = n; vorname = v; wohnort = w; } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer;}

+

Page 10: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/10Stefan Dissmann

Vererbung

public class Kunde extends Person {{ private int nummer;}

bedeutet:• Kunde wird als Unterklasse von Person definiert.• Person wird dadurch Oberklasse von Kunde.• Kunde hat geerbt:

• die öffentliche Methode toString,• die privaten Attribute name, vorname und wohnort.

• In Kunde wird definiert:• das private Attribut nummer.

Page 11: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/11Stefan Dissmann

Vererbung

Person

Kunde

Page 12: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/12Stefan Dissmann

Vererbung

Was bringt Vererbung?

Page 13: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/13Stefan Dissmann

Vererbung

Was bringt Vererbung?

• verringerten Schreibaufwand• Gleichförmigkeit• reduzierten Änderungsaufwand• vereinfachtes Testen

aber auch:

• ständiges Beachten der gegenseitigen Abhängigkeiten

Page 14: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/14Stefan Dissmann

Fragen

Was geht wie in der Klasse Kunde?

• Zugriff auf die geerbten privaten Attribute name, vorname und wohnort,

• z.B. Definition eines Konstruktors für alle vier Attribute,• z.B. gemeinsamer Text aus einigen Attributen,• z.B. gemeinsamer Text aus allen Attributen,• Zulässigkeit von Referenzen auf Ober- und Unterklasse.

Page 15: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/15Stefan Dissmann

Vererbung – Konstruktor in Unterklasse

Beispiel:public class Person { private String name, vorname, wohnort; public Person(String n, String v , String w) { name = n; … } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer;}

Page 16: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/16Stefan Dissmann

Vererbung – Konstruktor in Unterklasse

Beispiel:public class Person { private String name, vorname; public Person(String n, String v , String w) { name = n; … } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer; public Kunde (String n, String v, String w, int n) { name = n; vorname = v; wohnort = w; nummer = n; } }

Page 17: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/17Stefan Dissmann

Vererbung – Konstruktor in Unterklasse

Beispiel:public class Person { private String name, vorname; public Person(String n, String v , String w) { name = n; … } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer; public Kunde (String n, String v, String w, int n) { name = n; nicht erlaubt, da private in Oberklasse vorname = v; nicht erlaubt, da private in Oberklasse wohnort = w; nicht erlaubt, da private in Oberklasse nummer = n; } }

Page 18: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/18Stefan Dissmann

Vererbung – Konstruktor in Unterklasse

Beispiel:public class Person { private String name, vorname, wohnort; public Person(String n, String v , String w) { name = n; … } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer; public Kunde (String n, String v, String w, int n) { super(n, v, w); Aufruf des Konstruktors erlaubt, da

public nummer = n; } }

Page 19: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/19Stefan Dissmann

Vererbung – Texterzeugung in Unterklasse

Beispiel:public class Person { private String name, vorname, wohnort; public Person(String n, String v , String w) { name = n; …} public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer; public Kunde (String n, String v, String w, int n) { super(n, v, w); nummer = n; } public String ???() { return ??? + ", " + nummer; } }

Page 20: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/20Stefan Dissmann

Vererbung – Texterzeugung Version 1

Beispiel:public class Person { private String name, vorname, wohnort; public Person(String n, String v , String w) { name = n; … } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer; public Kunde (String n, String v, String w, int n) { super(n, v, w); nummer = n; } public String zuText() { return toString() + ", " + nummer; } }

Page 21: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/21Stefan Dissmann

Vererbung – Texterzeugung Version 2

Fragen:

• Ist Überdefinieren einer Methode in der Unterklasse möglich,also toString() in Ober und Unterklasse?

• Und: Wie wird dann der Namenskonflikt gelöst, um beideVersionen von toString() zu unterscheiden?

Page 22: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/22Stefan Dissmann

Vererbung – toString in Unterklasse

Beispiel:public class Person { private String name, vorname, wohnort; public Person(String n, String v, String w) { name = n; … } public String toString() { return name + ", " + vorname }}

public class Kunde extends Person { private int nummer; public Kunde (String n, String v, String w, int n) { super(n, v, w); nummer = n; } public String toString() { return super.toString() + ", " + nummer; } }

Page 23: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/23Stefan Dissmann

Vererbung – toString in Unterklasse

Zusammenfassung:

•super(…) bezeichnet den Konstruktor der Oberklasse.

•Überdefinieren von Methoden in Unterklassen ist möglich.

•super. … erlaubt den Zugriff auf Komponenten der Oberklasse.

Page 24: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/24Stefan Dissmann

Erweiterung der Klasse Kunde

Problem:Gewünscht ist Methode in Kunde, die wohnort ändern kann,wenn zugleich die richtige Kundenummer angegeben wird.

Page 25: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/25Stefan Dissmann

Erweiterung der Klasse Kunde

Problem:Gewünscht ist Methode in Kunde, die wohnort ändern kann,wenn zugleich die richtige Kundenummer angegeben wird.

Lösung:Erweiterung der Klasse Person um die Methoden gibOrt() und setzeOrt(String w)

aber:Nur die Unterklasse soll Änderung durchführen können,daher private zu wenig und public zuviel.

Page 26: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/26Stefan Dissmann

Erweiterung der Klasse Kunde

Problem:Gewünscht ist Methode in Kunde, die wohnort ändern kann,wenn zugleich die richtige Kundenummer angegeben wird.

Lösung:Erweiterung der Klasse Person um die Methoden gibOrt() und setzeOrt(String w)

daher:Zugriffsrecht protected nutzenUnterklassen dürfen zugreifen, andere Klassen nicht!

Page 27: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/27Stefan Dissmann

Überarbeitete Klasse Person

Beispiel:

public class Person { private String name, vorname, wohnort; public Person(String n, String v, String w) { name = n; vorname = v; wohnort = w; } public String toString() { return name + ", " + vorname } public String gibOrt() { return wohnort; } protected void setzeOrt(String w) { wohnort = w; }}

Page 28: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/28Stefan Dissmann

Überarbeitete Klasse Kunde

Beispiel:

public class Kunde extends Person { private int nummer; public Kunde (String n, String v, String w, int n) { super(n, v); nummer = n; } public String toString() { return super.toString() + ", " + nummer; } public aendereOrt(int n, String w) { if (nummer == n) wohnort = w; } }

Page 29: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/29Stefan Dissmann

Überarbeitete Klassen

Zusammenfassung:

•Person erlaubt nur Objekten von erbenden Klassen das Setzen des Ortes:

protected void setzeOrt(…)

• Kunde erlaubt allen Objekten das Ändern des Ortes, sofern die richtige Kundennummer angegeben wird:

public void aendereOrt(…)

Page 30: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/30Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

// Methoden in beiden Klassen vereinbart

System.out.println(p.toString());

System.out.println(k.toString());

Page 31: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/31Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

// Methoden in beiden Klassen vereinbart

System.out.println(p.toString());

System.out.println(k.toString());

// Methode aus Person vererbt

System.out.println(p.gibOrt());

System.out.println(k.gibOrt());

Page 32: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/32Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

// Methoden in beiden Klassen vereinbart

System.out.println(p.toString());

System.out.println(k.toString());

// Methode aus Person vererbt

System.out.println(p.gibOrt());

System.out.println(k.gibOrt());

// Methode nur in Kunde

k.aendereOrt(103, “Unna“);

Page 33: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/33Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

// Methoden in beiden Klassen vereinbart

System.out.println(p.toString());

System.out.println(k.toString());

// Methode aus Person vererbt

System.out.println(p.gibOrt());

System.out.println(k.gibOrt());

// Methode nur in Kunde

k.aendereOrt(103, “Unna“);

Page 34: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/34Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

// Methoden in beiden Klassen vereinbart

System.out.println(p.toString());

System.out.println(k.toString());

// Methode aus Person vererbt

System.out.println(p.gibOrt());

System.out.println(k.gibOrt());

// Methode nur in Kunde

k.aendereOrt(103, “Unna“);

p k

Page 35: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/35Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Folgerung:

Da jede öffentliche Methode der Oberklasseauch von jeder Unterklasse bereitgestellt wird,

darf eine Referenz der Oberklasse auf Objekte einer Unterklasse verweisen.

Page 36: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/36Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

p = k;

p.aendereOrt(103, “Unna“);

System.out.println(p.gibOrt());

System.out.println(p.toString());

Page 37: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/37Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

p = k;

p.aendereOrt(103, “Unna“);

System.out.println(p.gibOrt());

System.out.println(p.toString());

Nicht möglich, da p Referenz auf Person und aendereOrt in Person unbekannt ist.

Page 38: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/38Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

p = k;

p.aendereOrt(103, “Unna“);

System.out.println(p.gibOrt());

System.out.println(p.toString());

Nicht möglich, da p Referenz auf Person und aendereOrt in Person unbekannt ist.

Page 39: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/39Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

p = k;

p.aendereOrt(103, “Unna“);

System.out.println(p.gibOrt());

System.out.println(p.toString());

Unproblematisch, da in Person definiert und in Kunde nur geerbt.

Page 40: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/40Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

p = k;

p.aendereOrt(103, “Unna“);

System.out.println(p.gibOrt());

System.out.println(p.toString());

In Person definiert und in Kunde geerbt und überdefiniert, so dass zwei Versionen von toString() bereit stehen.Welche Version wird ausgeführt?

Page 41: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/41Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

p = k;

p.aendereOrt(103, “Unna“);

System.out.println(p.gibOrt());

System.out.println(p.toString());

Welche Version wird ausgeführt?Das Objekt entscheidet, nicht die Referenz:Da hier ein Kunde-Objekt, wird toString() aus Kunde aufgerufen.

Page 42: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/42Stefan Dissmann

Vererbung

Person

Kunde

Aufruf einer Methode

Page 43: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/43Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Zusammenfassung:

• Der Typ der Referenz bestimmt, welche Methoden über diese Referenz überhaupt aufgerufen werden dürfen.

• Wenn eine Methode über eine Referenz aufgerufen werden kann, dann wird immer die in oder am nächsten vor der Klasse des Objekts definierte Version ausgeführt.

Page 44: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/44Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Zusammenfassung:

• Der Typ der Referenz bestimmt, welche Methoden über diese Referenz überhaupt aufgerufen werden dürfen.

• Wenn eine Methode über eine Referenz aufgerufen werden kann, dann wird immer die in oder am nächsten vor der Klasse des Objekts definierte Version ausgeführt.

Polymorphie

Page 45: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/45Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel – es geht auch wieder zurück:

Person p = new Person (“Meier“, “Jana“, “Dortmund“);

Kunde k = new Kunde (“Schmidt“, “Axel“, “Bochum“, 103);

p = k;

System.out.println(p.gibOrt());

System.out.println(p.toString());

k = (Kunde)p;

expliziter Type-Cast:Der Programmierer versichert dem Programm, dass p auf ein Objekt der Klasse Kunde verweist.

Page 46: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/46Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Wofür das Ganze?

Page 47: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/47Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Wofür das ganze Referenzierungskonzept?

Es lassen sich Algorithmen formulieren, die nicht wissen müssen, mit welcher Art von Unterklassen-Objekten sie bei der Ausführung tatsächlich umgehen.

Beispiel: Liste, die nicht weiß, ob int-Werte oder Kunden-Objekte aufgelistet werden.

Page 48: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/48Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Wofür das ganze Referenzierungskonzept?

Es lassen sich Algorithmen formulieren, die nicht wissen müssen, mit welcher Art von Unterklassen-Objekten sie bei der Ausführung tatsächlich umgehen.

Und: Objekte verschiedener Klassen können gemeinsam verarbeitet werden.

Beispiel:Objekte der Klassen Kunde und Lieferant bei Weihnachtsgrüßen.

Page 49: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/49Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

public class Lieferant extends Person { …}

Page 50: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/50Stefan Dissmann

Referenzen auf Ober- und Unterklassen

Beispiel:

public class Lieferant extends Person { …}

Lieferant ist eine weitere Unterklasse von Person.

Page 51: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/51Stefan Dissmann

Unterklassen von Unterklassen

Beispiel:

public class Goldkunde extends Kunde { private String geschenk; …}

Page 52: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/52Stefan Dissmann

Unterklassen von Unterklassen

Beispiel:

public class Goldkunde extends Kunde { private String geschenk; …}

Goldkunde ist jetzt:• (direkte) Unterklasse von Kunde und zugleich• eine weitere Unterklasse von Person

Page 53: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/53Stefan Dissmann

Klassenhierarchie

Person

Kunde

Goldkunde

Lieferant

Page 54: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/54Stefan Dissmann

Anmerkungen zum Vererbungskonzept

Jede Klasse hat höchstens eine Oberklasse:

public class Goldkunde extends Kunde { private String geschenk; …}

(Die Syntax erlaubt hier keine Liste!)

Page 55: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/55Stefan Dissmann

Anmerkungen zum Vererbungskonzept

Jede Klasse hat höchstens eine Oberklasse:

public class Goldkunde extends Kunde { private String geschenk; …}

(Die Syntax erlaubt hier keine Liste!)

Es entstehen immer Vererbungsbäume!

Page 56: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/56Stefan Dissmann

Anmerkungen zum Vererbungskonzept

Jede selbst definierte Klasse hat eine explizite Oberklasse oderdie implizite Oberklasse Object:

public class Person extends Object { …}

Page 57: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/57Stefan Dissmann

Anmerkungen zur Syntax

Jede selbst definierte Klasse hat eine explizite Oberklasse oderdie implizite Oberklasse Object:

public class Person extends Object { …}

Alle Klassen bilden einen Vererbungsbaum mit der Wurzel Object!

Page 58: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/58Stefan Dissmann

Anmerkungen zum Vererbungskonzept

Jede selbst definierte Klasse hat eine explizite Oberklasse oderdie implizite Oberklasse Object:

public class Person extends Object { …}

Alle Klassen bilden einen Vererbungsbaum mit der Wurzel Object!

Referenzen der Klasse Object können auf jedes Objekt verweisen.

Page 59: PKJ 2005/1 Stefan Dissmann Kritische Betrachtung Bisher implementiert: Listen für Werte des Typs int über Elemente der Klasse intElement Liste für double.

PKJ 2005/59Stefan Dissmann

Klassenhierarchie

Person

Kunde

Goldkunde

Lieferant

Object