![]() |
Java: Vererbung/Überschreibung
Hi,
kurze Verständnisfrage zum Thema überschreiben in Java. Habe folgende Klassenhierarchie:
Delphi-Quellcode:
class TNode {
public T data; public void setData(T d) { data = d; } } class TDNode extends TNode { public Link prev; static int counter = 0; public void setData(T d) { super.setData(d); counter++; } } Meine Frage: Wieso kann ich in der TDNode Klasse in der setData Methode das setData der Oberklasse TNode aufrufen? In meinen Vorlesungsunterlagen steht: Zitat:
Hierzu hab ich folgendes Beispiel im Web gefunden:
Delphi-Quellcode:
Hier ists ja das gleiche Prinzip. Ich Caste in die Oberklasse und rufe die Methode auf. Es wird aber die Methode der Unterklasse aufgerufen, weil diese ja die Methode der Oberklasse überschrieben hat.
class Ober
{ String id = "ooo"; String WhoAreYou() { return "Ober"; } } class Unter extends Ober { String id = "uuu"; String WhoAreYou() { return "Unter"; } void identify() { Unter u = new Unter(); Ober o = u; System.out.println(o.id); System.out.println(u.id); System.out.println(o.WhoAreYou()); System.out.println(u.WhoAreYou()); } Ausgabe von new Unter().identify(): ooo uuu Unter Unter Kann mir da jemand weiterhelfen? |
Re: Java: Vererbung/Überschreibung
Du hast vollkommen recht, der Satz in den Unterlagen ist Unsinn.
super ist also nicht nur eine Abkürzung, sondern hebelt im Gegensatz zu einem Cast die Polymorphie aus, eine virtuelle Methode kann nicht-virtuell aufgerufen werden. |
Re: Java: Vererbung/Überschreibung
gut vielen dank :)
|
Re: Java: Vererbung/Überschreibung
Zitat:
Delphi-Quellcode:
Im Code steht aber
Ober o = (Ober) u;
Delphi-Quellcode:
damit wird u einfach nur einer kompatiblen Variablen eines Vorfahrtyps zugewiesen, d.h. man kann für "o" nur auf die in der Klasse "Ober" definierten Methoden und Properties zugreifen (die aber in der konkreten Instanz überschrieben sein können).
Ober o = u;
Cheers, |
Re: Java: Vererbung/Überschreibung
Da wird ja das Prinzip der Ersetzbarkeit(?) angewendet, also man Unter als Ober einsetzen, weil Unter ja ein Untertyp von Ober ist.
Wo ist denn da jetzt der Unterschied zu einem expliziten Typecast? Ich spreche in dem Beispiel doch u als Ober an. Das müsste doch äquivalent sein zu einem Aufruf (Ober)u?! |
Re: Java: Vererbung/Überschreibung
Zitat:
Zitat:
Just my 2 cents. |
Re: Java: Vererbung/Überschreibung
Hätte ich auch geantwortet, in Java unterscheiden sich aber anscheinend die Termini ein wenig von seinem Bruder im Geiste ;) . Ein Cast ist dort immer explizit, das hier wäre eine Conversion:
Zitat:
...und könnte man die Dinger in Java auch überladen, würden sie sicher wieder anders heißen. PS: Der Trick mit dem Wohnort gefällt mir *g* . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz