Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 1 Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.

Ähnliche Präsentationen


Präsentation zum Thema: "Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 1 Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden."—  Präsentation transkript:

1 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 1 Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden und Zustandsvariablen d aus K1 und K2 werden zu K1d und K2d f aus K1 und K2 werden zu K1f und K2f mehrdeutige Variablen- und Methodendefinitionen müssen in der durch Mehrfachvererbung entstehenden Klasse überdeckt bzw. überschrieben werden Neudefinition von d und f in der Klasse K beim Linearisierungsverfahren wird intern vom Übersetzer durch die Reihenfolge der Basisklassen in der Klassendefinition K extends K1, K2 {} eine eigentlich nicht vorhandene Klassenhierarchie aufgebaut K1 wird nun von K2 abgeleitet, damit werden d und f in K nun von K1 und nicht mehr von K2 geerbt

2 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 2 Virtuelle Vererbung

3 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 3 Reale und Virtuelle Vererbung Eine von einer Basisklasse A abgeleitete Klasse B erbt die Attribute und Methoden, die A anbietet Vererbung von Methoden Bei der realen Vererbung wird mit einer Methoden- deklaration aus A auch immer deren Implementierung vererbt Bei der virtuellen Vererbung wird die Methoden- deklaration von A geerbt, die Methode selbst kann in B reimplementiert werden Methoden, die eine virtuelle Vererbung und Reimplementierung (Überschreiben) zulassen, nennen wir virtuelle Methoden

4 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 4 Überschreiben von Methoden in abgeleiteten Klassen können Methoden dieselbe Signatur (Parameter- und Rückgabetypen) wie in der Basisklasse haben class Rectangle { int x, y, width, height; void draw() {...}; void move(int x, int y){...}; Point left(){...}; void erase(){...} } class ColoredRectangle extends Rectangle{ Color color; void draw() {...}; void setcolor(Color c) {...}; void getcolor(){return color}; }

5 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 5 Überschreiben von Methoden die Implementierung der Basisklasse wird durch die der abgeleiteten Klasse ersetzt hat eine Methode mehrere Implementierungen, so bezieht sich ein Zugriff immer auf die in der am meisten abgeleiteten Klasse Zuordnung der Implementierung eines Methodenaufrufs zur Laufzeit ColoredRectangle cr = new ColoredRectangle(); Rectangle r = cr; cr.draw();// Zugriff auf die Methode draw aus ColoredRectangle r.draw();// Zugriff auf die Methode draw aus ColoredRectangle Zuordnung der Implementierung eines Methodenaufrufs wird in zwei Schritten durchgeführt: 1. Bestimmung der Signatur eines Aufrufs zur Übersetzungszeit 2. Auswahl der letzten Implementierung zur Laufzeit

6 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 6 Erster Schritt: Übersetzungszeit aktuelle Parametertypen des Methodenaufrufs werden bestimmt, dann wird die Signatur des Aufrufs festgelegt K k; : k.f(a 1,..., a n ) Signatur eines Methodenaufrufes hängt alleinig von der Klasse ab, von welcher die Variable definiert ist, mit der auf das Objekt zugegriffen wird für den Aufruf k.f(a1,..., an) wird in der Klasse K - ähnlich wie beim Auflösen überladener Methodenaufrufe - nach einer geeigneten Methode gesucht, mit welcher der aktuelle Aufruf durchgeführt werden kann

7 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 7 Zweiter Schritt: Ausführungszeit zur Programmausführungszeit wird dann überprüft, von welcher Klasse das Objekt, für das der Methodeaufruf durchgeführt werden soll, tatsächlich generiert wurde in dieser zur Laufzeit gefundenen Klassenbeschreibung wird nach der letzten Implementierung des Methodenaufrufs gesucht K k; K1 k1 = new K1(); : k = k1; k.f(a 1,..., a n )

8 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 8 Erinnerung: Zugriff auf Zustandsvariablen die Zuordnung von Referenzzugriffen auf Zustandsvariablen wird alleinig zur Übersetzungszeit aufgelöst und hängt wieder nur davon ab, von welcher Klasse die Variable definiert ist, mit der auf das Objekt zugegriffen wird K k; : k.x für einen Zugriff k.x wird die Zustandsvariable x immer in der Klassenbeschreibung von K gesucht und das unabhängig davon auf was für ein Objekt mit k tatsächlich zur Laufzeit zugegriffen wird

9 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 9 Beispiel: Methoden- und Variablenzugriffe class Print1{ int x = 1; void Print(Object a) { System.out.println(x); } class Print2 extends Print1{ int x = 2; void Print(Object a) { System.out.println(x); } void Print(Float a) { System.out.println(x + 1); }

10 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 10 Techniken zur Realisierung dynamischer Bindung dynamische Bindung durch Methodensuche dynamische Bindung mit Methodentabellen Methodentabelle Methoden-Code Methodentabelle für Rectangle für ColoredRectangle x 10 y 20 mTab Rectangle width 120 height 75 draw erase move left R.draw R.erase R.move R.left CR.draw CR.setcolor CR.color draw erase move left setcolor color ColoredRectangle mTab x 10 y 20 width 120 height 75 color blue

11 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 11 Beispiel: Überschreiben, Überladen, Überdecken class Point { int x, y, color; void moveTo(int x, int y) {...}; void moveRel(int x, int y){...}; int getX(){return x;} int getY(){return y;} } class RealPoint extends Point{ float x, y, color; void moveTo(float x, float y) {...}; void moveRel(float x, float y){...}; int getX(){return (int) Math.floor(x);} int getY(){return (int) Math.floor(y);} }

12 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 12 Abstrakte Klassen Eigenschaften abstrakte Klassen sind Schablonen => unvollständig implementiert sie können deshalb nicht instanziert werden ein Klasse muss in Java mit abstract deklariert sein wenn in der Klasse mindestens eine abstrakte Methode deklariert wird, oder wenn eine abstrakte Methode von der Oberklasse geerbt, und nicht überschrieben wird Beispiel für abstrakte Klassen Number –Double –Float –Integer –Long InputStream

13 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 13 Abstrakte Methoden Abstrakte Methoden werden mit dem Modifizierer abstract deklariert benötigt keine Implementierung eine abstrakte Methode darf nicht mit static oder final deklariert werden muss von der Unterklasse implementiert werden, um Objekte der Unterklasse bilden zu können abstract class Fahrzeug { abstract void starte(); } class Fahrrad extends Fahrzeug{ void starte(){ steige_auf();... }

14 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 14 Schnittstellen (Interfaces) wie bei abstrakten Klassen stellt eine Schnittstelle eine Schablone zur Verfügung Schnittstellen enthalten nur abstrakte Methodendeklarationen Variablendefinitionen sind automatisch als final und static definiert von einer Schnittstelle kann ebenfalls kein Objekt erzeugt werden eine Klasse K kann mehrere Schnittstellen implementieren K erbt dabei alle Konstanten- und abstrakten Methodendeklarationen der Schnittstelle alle in der Schnittstelle deklarierten Methodendeklarationen müssen in K implementiert (überschrieben) werden Definition einer Schnittstelle: interface Iname1{... } Implementierung : class Name implements Iname1, Iname2,...

15 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 15 Beispiel: Schnittstelle interface KannSchwimmen{ void schwimmen(); } interface KannLaufen{ void laufen(); } interface KannFliegen{ void fliegen(); } class Ente extends Tier implements KannSchwimmen, Kannlaufen, KannFliegen {... }

16 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 16 Weitere Beispiele: Schnittstelle public interface GraphObj { int BLACK = 0; int BLUE = 1; int WHITE = 2; void show(); void hide(); void setColor(); } public interface GlobalConstants { int MAX_RECORDS = 1000; String ERR_MSG = “More than “+MAX_RECORDS+” records.”; } public interface Cloneable { }

17 Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 17 Implementierung einer Schnittstelle class Point implements GraphObj { int x, y, color; public Point(int x, int y, int color){ this.x = x; this.y = y; setColor(color); show(); } protected void drawPoint(int x, int y, int color){... } protected int getBackgroundColor(){... } public void setColor(int color){ this.color = color; } public void show(){ drawPoint(x, y, color); } public void hide(){ drawPoint(x, y, getBackgroundColor()); } }


Herunterladen ppt "Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 1 Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden."

Ähnliche Präsentationen


Google-Anzeigen