|
|||||||||||||||||||||||||||||
| ISBN: 3828750281 ISBN: 3828750281 ISBN: 3828750281 ISBN: 3828750281 | |||||||||||||||||||||||||||||
|
Wir empfehlen: | ||||||||||||||||||||||||||||
2.2.
Generalisierung und Spezialisierung allgemein Wie bereits im Abschnitt zuvor erwähnt dient Vererbung zum einen der Wiederverwendbarkeit des Quelltextes und zum anderen der Verfeinerung, bzw. der Spezialisierung einer Implementierung. Die vererbende Klasse ist dabei der allgemeinere Typ, der von der erbenden Klasse verfeinert wird. Dies wird am Beispiel der Evolution (vgl. Abbildung 2.2.1) näher erläutert und stellt eine Form einer möglichen Klassifizierung dar. Jedes Lebewesen (Vogel, Affe, Fisch, Krake) besitzt in der Klassifizierung spezifische Eigenschaften (Attribute), haben aber alle bestimmte Eigenschaften gemeinsam (Objekt-ID, Name, Grösse und Gewicht). Diese allgemeinen Attribute, die sie von ihren generischeren Obertypen Wassertier und Landtier geerbt haben, nennt man generische Attribute. Die Obertypen Wassertier und Landtier haben jedoch bereits diese Attribute von ihrem Obertypen
Abbildung 2.2.1: Darstellung der Evolution im Klassenmodell Lebensform geerbt. Die Objekte Vogel und Affe haben ihren Obertypen Landtier mit den Attributen Flügel, Federn und Hände, Haare verfeinert. Diese Attribute, die zur Erweiterung dienen nennt man spezialisierende Attribute. Diese Spezialisierung fand bei dem Obertyp Wassertier durch Flossen, Schuppen, Tentakel und Haut ebenfalls statt. Fisch und Krake stellen gegenüber dem Wassertier ebenfalls eine Spezialisierung, bzw. Weiterentwicklung dar. Diese Termini lässt sich der Anschaulichkeit halber auf die Evolutionslehre exakt übernehmen. Genauso haben die Obertypen Wassertier und Landtier ihren Obertypen Lebensform mit den Attributen Kiemen und Lungen verfeinert. Genau betrachtet befindet sich in diesem Beispiel eine zweifache Vererbung. Erstens die Vererbung der generischen Attribute (Objekt-ID,...) an Untertypen Wassertier und Landtier, mit der Spezialisierung Lungen und Kiemen, und zweitens die Weitervererbung (=Weiterverwendung) der generischen und bereits spezielleren Attribute an die Untertypen Vogel, Affe, Fisch und Krake, die ebenfalls weitere Spezialisierungen vornehmen. Man kann dem Diagramm also entnehmen, dass nach unten hin eine Spezialisierung und nach oben eine Generalisierung Einzug nimmt. Weiter spricht mal von einer "ist-ein"-Beziehung (is-a-relation): "Ein Fisch ist ein Wassertier und ist eine Lebensform.". 2.3.
Was und wie wird in Java vererbt? Grundsätzlich erbt in Java jede Klasse von dem Urobjekt Object. Dies kann explizit mit myClass extends Object erfolgen oder wird von Java automatisch übernommen, wenn man diesen Aufruf weglässt. Bei der Vererbung in Java werden alle Methoden und Attribute der SuperKlasse, insbesondere auch statische (static) Methoden und Attribute, sowie innere Klassen (inner classes) vererbt. Die Konstruktoren werden nicht vererbt, können aber aufgerufen werden. Ist für die SubKlasse kein eigener Standard-Konstruktor (myClass(){...}) implementiert, so wird der Standard-Konstruktor automatisch verwendet. Java bietet die Möglichkeit, einen SuperKlassen-Konstruktor mit super([Parameter]); aufzurufen. Findet in dem verwendeten SubKlassen-Konstruktor kein expliziter super-Aufruf statt, so wird automatisch der Standard-Konstruktor der SuperKlasse aufgerufen. Dieser automatische Aufruf findet nur beim nullstelligen Konstruktor statt, ansonsten müssen super-Aufrufe explizit angegeben werden. Der Standard-Konstruktor muss in der erbenden Klasse angegeben werden, da dieser nicht vererbt wird. Auf die Zugriffrechte (Access-Modifier: protected und final) der erbenden Klasse wird im Abschnitt 3 genau eingegangen. In der Programmiersprache Java stehen zwei Möglichkeiten der Vererbung zur Verfügung. Zum einen das Erweitern und zum anderen das Anpassen des geerbtem. In folgendem Beispiel wird Person an die Klasse Student vererbt, welche anschließend erweitert und angepasst wird: class Person {Die Klasse Student, die mit dem Attribut int semester die Klasse Person erweitert und die Methode drucken() wird für Student verfeinert: class Student extends Person {Beispiel inherit.java Durch das Hinzufügen von dem Attribut semester, wir die Klasse Student erweitert. Wesentlich interessanter ist jedoch das Verfeinern vorhandener Methoden und Konstruktoren. Diese Verfahren nennt man Überschreiben (overriding). Dabei werden vererbte Methoden der SuperKlasse mit gleicher Signatur überschrieben, bzw. außer Kraft gesetzt. Der Aufruf des StandardKonstruktors Student() beinhaltet einen super-Aufruf des StandardKonstruktors der SuperKlasse. Dieser Aufruf ist optional, da er automatisch ausgeführt wird, wenn man den super-Aufruf weglässt. In dem Aufruf der Methode drucken() der SubKlasse findet eine explizite Verfeinerung statt: Durch den Aufruf super.drucken() (super.MethodenName([Parameter]);) wird die Methode drucken() der SuperKlasse Person ausgeführt und anschließend eine weitere Ausgabe getätigt. Das Augenmerk ist dabei auf die Signatur der super-Methode gerichtet, die identisch ist. Hierbei wurde ein allgemeinerer Implementierungsrahmen spezialisiert. Super-Aufrufe können statisch gebunden werden, weil bereits zur Übersetzungszeit feststeht welche Implementierung verwendet wird. Innere Klassen können genauso erweitert oder angepasst werden. |
|
||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||
| |<< First < Previous Index Next > Last >>| | |||||||||||||||||||||||||||||
|
Back to the topic site: StudyPaper.com/Startseite/Computer/Informatik/Programmieren/Java External Links to this site are permitted without prior consent. | |||||||||||||||||||||||||||||
| Home | deutsch | Set bookmark | Send a friend a link | Copyright © | Impressum | |||||||||||||||||||||||||||||