pkj 2005/1 stefan dissmann kritische betrachtung bisher implementiert: listen für werte des typs...
TRANSCRIPT
![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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/1.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/2.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/3.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/4.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/5.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/6.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/7.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/8.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/9.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/10.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/11.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/12.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/13.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/14.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/15.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/16.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/17.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/18.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/19.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/20.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/21.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/22.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/23.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/24.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/25.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/26.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/27.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/28.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/29.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/30.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/31.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/32.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/33.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/34.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/35.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/36.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/37.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/38.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/39.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/40.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/41.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/42.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/43.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/44.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/45.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/46.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/47.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/48.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/49.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/50.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/51.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/52.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/53.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/54.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/55.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/56.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/57.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/58.jpg)
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](https://reader035.vdokument.com/reader035/viewer/2022062417/55204d6249795902118b6b28/html5/thumbnails/59.jpg)
PKJ 2005/59Stefan Dissmann
Klassenhierarchie
Person
Kunde
Goldkunde
Lieferant
Object