Upcasting
-Wenn man Ober- und Unterklassen hat kann man
-Eine Refernz die normalerweise ein Objekt der Unterklasse ist auch ohne Probleme auf ein Objekt der Oberklasse zuweisen
-Unterklassen Referenzen sind immer kompatibel zu ihrer Oberklasse
class Pkw { }
class Coupé extends Pkw { }
class Test {
public static void main(String[] args) {
Pkw p = new Pkw ();
Coupé c = new Coupé();
p = c; // Upcast
}
}
Warum funktioniert Upcasting?
frühes vs spätes Binden
In C werden aufzurufenden Funktionen vom Compiler bestimmt (frühes Binden)
In Java werden aufzurufenden Methoden zur Laufzeit bestimmt (spätes Binden)
=> überschriebene Methode Entscheidung zur Laufzeit anhand des referenzierten Objekts , ob die Unter- oder Oberklassenmethode gemeint ist
Polymorphie und abstrakte Klassen
abstrakte Methoden gut geeignet für Polymorphie , weil unterschiedliche Implementierungen erst zur Laufzeit bestimmt ausgewählt wird.
Downcasting
Man kann eine Oberklasse nur schlecht in eine Unterklasse verwandeln , höchstens mit expliziter Typkonversion (casts) und auch dann entstehen evtl. Laufzeitfehler
Der Operator instanceof
testet of das objekt auf der linken seite vom typ auf der rechten seite angegeben ist, entspricht => schlechter Coding style