140 likes | 321 Views
Einführung in die Programmierung mit Java. 9. Vorlesung WS 2001/2002. Ü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 9. Vorlesung WS 2001/2002
Übersicht • Klassen und Objekte: Vererbung • Konzeptueller Hintergrund: Spezialisierung • Modellierung mittels UML • Vererben von Variablen • Vererben von Methoden • Überlagerung von Methoden • Zugriff auf überlagerte Methoden T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
Abstraktion Klassenhierarchien • konzeptueller Hintergrund: Generalisierung Spezialisierung • Spezifikation in UML (Unified Modeling Language): T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
Person Verwaltungs-angestellter spezieller Student Dozent Ordentlicher Student Gasthörer Beispiel zu Klassenhierarchien T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
Klassenhierarchien in Java (I) Syntax: classUnterklasseextendsOberklasse{ . . . } Beispiel: Datei Person.java:class Person { . . . } Datei Student.java:class Student extends Person { . . . } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
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 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
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 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
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() T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
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. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
Ü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 { ... } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
Ü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(. . .); T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
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 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
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(); T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
Ü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. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02