pdf, 4 Folien pro Seite

Werbung
Vererbung – Überschreiben von Methoden
Vererbung – Überschreiben von Methoden
public class Ellipse {
public class Ellipse {
float x, y, r, r2;
float x, y, r, r2;
public double umfang () {
return Math.PI
* ((this.r + this.r2) * 3 / 2
- Math.sqrt(this.r * this.r2));
}
public double umfang () {
return Math.PI
* ((r + r2) * 3 / 2
- Math.sqrt(r * r2));
}
}
}
– Dynamische Bindung (late binding)
– Dynamische Bindung (late binding)
– xxx.umfang() für Instanzen von Ellipse
– xxx.umfang() für Instanzen von Ellipse
– xxx.umfang() für Instanzen von Circle
– xxx.umfang() für Instanzen von Circle
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
92
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
93
Vererbung – Dynamische Bindung (late binding)
Vererbung – Überschreiben von Methoden
public class Circle extends Ellipse {
public double umfang () {
return Math.PI * ((r + s) * 3 / 2
- Math.sqrt(r * s));
public double umfang () {
return 2 * Math.PI * r;
}
double r;
public double umfang () {
return 2 * Math.PI * r;
}
}
Ellipse e = new Ellipse();
Circle c = new Circle();
– Dynamische Bindung (late binding)
… e.umfang() …
… c.umfang() …
– xxx.umfang() für Instanzen von Ellipse
– xxx.umfang() für Instanzen von Circle
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
94
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
95
Vererbung (Typ-Subtyp-Beziehung)
Vererbung – Dynamische Bindung (late binding)
A
!
Der Typ des Nachrichtenempfängers
entscheidet, welche Methode aufgerufen
wird.
class B extends A {
…
}
Ellipse e = new Ellipse();
Circle c = new Circle();
B
– jedes B ist auch ein A, B ist Subtyp von A
– überall, wo ein A erwartet wird, darf auch ein B auftauchen
… e.umfang() …
… c.umfang() …
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
96
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
97
Vererbung – Dynamische Bindung (late binding)
Vererbung (Typ-Subtyp-Beziehung)
Ellipse e;
Circle c;
class Circle extends Ellipse {
…
}
if (das_Wetter_ist_schoen())
e = new Ellipse();
else
e = new Circle();
… e.umfang() …
– jeder Kreis ist auch eine Ellipse,
Circle ist Subtyp von Ellipse
– überall, wo eine Ellipse erwartet wird, darf auch ein Kreis
auftauchen
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
!
98
Methodenauswahl zur Laufzeit
parametrischer Polymorphismus
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
99
Vererbung (Struktursicht, Finalisieren von Klassen)
Vererbung (Typsicht)
Welche Komponenten hat eine Klasse ?
class Circle extends Ellipse {
…
}
Attribute (Instanzvariablen)
– alle Attribute der Superklasse (und damit aller
Superklassen)
– alle eigenen (lokalen) Attribute
(nur) Intuition :
U Universum aller Objekte, Ellipse Menge von Objekten, die gewisse
Merkmale ihrer Instanzen verlangt (x, y, r, r2, …)
Also: Ellipse ⊆ U (alle Ellipsen sind Objekte)
Analog: Circle ⊆ U.
Circle verlangt mehr Merkmale (double r) als Ellipse, ist also eine
kleinere Menge von Instanzen, also Circle ⊆ Ellipse
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
100
Methoden
– alle Methoden der Superklasse, die nicht durch
eine gleiche lokale Methode (Name und
Signatur) überschrieben werden
– alle lokalen Methoden
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
101
Herunterladen