Vorteile der Vererbung • Implementation / Funktion einer Oberklasse kann zu einem späteren Zeitpunkt „quasi von außen“ verbessert bzw. korrigiert werden – es wird eine entsprechende Unterklasse definiert, die die zu ändernden Methoden und Variablen durch neue Versionen überlagert • Dadurch, dass Klassen durch Unterklassen in eigenen QuelltextDateien spezialisiert werden können, bleiben Programme langfristig erweiterbar. • Stufenweise Abstraktion der Klassenhierarchie ermöglicht die Wiederverwendbarkeit der generelleren Klassen für andere Projekte. – In einzelnen Projekten werden dann speziellere Unterklassen der eher generellen Klassen definiert. G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 1 Überlagerung (engl.: Overriding) • • • • Eine Methode einer Unterklasse kann denselben Namen und dieselbe Anzahl/denselben Typ der Parameter wie eine Methode einer Oberklassen haben Die Methode der Unterklasse überlagert die Methode der Oberklasse Es findet keine Vererbung statt Beispiel: class Person { String vorname, nachname; void ausgeben() {System.out.println(vorname+nachname); } } überlagert Methode ausgeben in Klasse Person class Student extends Person { long matrikelnr; void ausgeben(){ System.out.println(vorname+nachname+matrikelnr); } } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 2 Überlagerung • Bei Überlagerung von Methoden spricht man von Polymorphismus • Überlagerte Methoden sind beim Aufruf nicht unterscheidbar • Frage: Welche Methode wird verwendet? • Antwort: die der Klasse des Objekts, nicht die der Klasse der Referenzvariablen • Beispiel: (wie eben mit überlagerter Methode ausgeben()) Student s = new Student(); Person p = s; p.ausgeben(); //ausgeben() von Student, nicht von Person • Dies wird als Dynamisches Binden bezeichnet G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 3 Beispiel zur Überlagerung von Methoden class Person { String vorname, nachname; void ausgeben() { System.out.println(vorname + nachname); } Ruft die überlagerte } die Methode Überlagert der Oberklasse class Student extends Person { gleichnamige auf (welche bereits für die long matrikelnr; Methode Ausgabe der darin der void ausgeben() { Oberklasse definierten Variablen sorgt) super.ausgeben(); System.out.println(matrikelnr); } } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 4