140 likes | 269 Views
Einführung in die Programmierung mit Java. 8. Vorlesung WS 2002/2003. Übersicht. Klassen und Objekte: Vererbung Konzeptueller Hintergrund: Spezialisierung Modellierung mittels UML Vererben von Variablen Vererben von Methoden Überlagerung von Methoden Zugriff auf überlagerte Methoden.
E N D
Einführung in die Programmierung mit Java 8. Vorlesung WS 2002/2003
Übersicht • Klassen und Objekte: Vererbung • Konzeptueller Hintergrund: Spezialisierung • Modellierung mittels UML • Vererben von Variablen • Vererben von Methoden • Überlagerung von Methoden • Zugriff auf überlagerte Methoden G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Abstraktion Klassenhierarchien • konzeptueller Hintergrund: Generalisierung Spezialisierung • Spezifikation in UML (Unified Modeling Language): G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Person Verwaltungs-angestellter spezieller Student Dozent Ordentlicher Student Gasthörer Beispiel zu Klassenhierarchien Ein Dozent ist eine Person Ein Student ist eine Person Ein Gasthörer ist ein Student G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Klassenhierarchien in Java (I) Syntax: class UnterklasseextendsOberklasse{ . . . } Beispiel: Datei Person.java:class Person { . . . } Datei Student.java:class Student extends Person { . . . } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Klassenhierarchien in Java (II) • Unterklassen haben genau eine Oberklasse • Eine Oberklasse kann beliebig viele Unterklassenbesitzen • Unterklassen können selber wieder Unterklassen besitzen • Die oberste Klasse in Java ist die Klasse Object • alle Klassen sind direkt oder indirekt (wg. Transitivität) Unterklassen von Object • wird bei der Klassendefinition kein extends-Schlüsselwort angegeben, so ist die neue Klasse automatisch direkte Unterklasse von Object G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Vererbung • Eine Unterklasse erbt alle Eigenschaften ihrer Oberklasse: • Eine Unterklasse erbt alle Variablen ihrer Oberklasse • Eine Unterklasse erbt alle Methoden ihrer Oberklasse • Vererbungsbeziehung ist transitiv • eine Unterklasse erbt die Eigenschaften aller darüberliegenden Oberklassen G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Bsp. für Vererbung von Variablen & Methoden Variablen & Methoden der Klasse class A { int aVar; aVar void aMethode(){...} aMethode()} class B extends A { int bVar; aVar, bVar void bMethode(){...} aMethode(), bMethode()} class C extends B { int cVar; aVar, bVar, cVar void cMethode(){...} aMethode(), bMethode(), cMethode()} class D extends C { int dVar; aVar, bVar, cVar, dVar void dMethode(){...} aMethode(), bMethode(), } cMethode(), dMethode() G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Vorteile der Vererbung • Implementation / Funktion einer Oberklasse kann zu einem späteren Zeitpunkt „quasi von außen“ verbessertbzw. 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 Quelltext-Dateien 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
Übung im GIS-Labor • Implementieren Sie die zwei Klassen Person und Student als Ober- bzw. Unterklasse: • Personen haben als Attribute (Instanzvariablen): • Vor- und Nachname • Straße und Hausnummer • PLZ und Ort • Studenten haben zusätzlich: • Matrikelnummer • Studiengang • Datum des Erstsemesters zur Erinnerung: class x extends y { ... } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Überlagerung (engl.: Overriding) • Methoden einer Unterklasse können Methoden gleicher Signatur (Name+Parameterliste) aus den Oberklassen überlagern • Zweck: Unterklassen modellieren speziellere Objekte; Methoden der Oberklasse müssen häufig ebenfalls spezialisiert werden • Zugriff: • im Normalfall wird die speziellste Methode verwendet • expliziter Aufruf einer überlagerten Methode Name der Oberklasse mittels: super.Name(. . .); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Beispiel zur Überlagerung von Methoden class Person { String vorname, nachname; void ausgeben() { System.out.println(vorname + nachname); }} class Student extends Person { long matrikelnr;void ausgeben() { super.ausgeben(); System.out.println(matrikelnr); }} Ruft die überlagerte Methode der Oberklasse auf (welche bereits für die Ausgabe der darin definierten Variablen sorgt) Überlagert die gleichnamigeMethode der Oberklasse G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Typkompatibilität • Einer Variablen der Klasse K dürfen Objekte der Klasse K sowie aller ihrer Unterklassen zugewiesen werden. Beispiel: Student s = new Student(); Person p = s; Über die Referenzvariable pkann nur auf die Methoden & Instanzvariablen des Studenten-Objekts zugegriffen werden, die von Person vererbt worden sind. • Der umgekehrte Weg geht nicht: • Einer Variablen der Unterklasse K kann kein Objekt ihrer Oberklasse zugewiesen werden (dem Objekt fehlen die für die Unterklasse spezifischen Eigenschaften) Beispiel: Student s = new Person(); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
Übungsaufgabe • Ergänzen Sie die vorgestellten Klassen „Person“ und „Student“ um die Unterklassen „Dozent“ und „Verwaltungsangestellter“. Die Unterklasse „Dozent“ soll dabei noch weiter in „Professor“ und „Assistent“ unterschieden werden. • Alle Klassen sollen eine Methode void ausgeben() besitzen, die den Inhalt aller Instanzvariablen ausgibt.(Die Methoden ausgeben() der Unterklasse überlagern dann die gleichnamige Methode der Oberklasse(n)) • Erzeugen Sie ein Objekt jeder Klasse, initialisieren Sie sie mit Beispieldaten und geben Sie die Objekte anschliessend mittels der Methode ausgeben() aus. G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03