AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Java: Vererbung/Überschreibung

Ein Thema von Antigo · begonnen am 24. Jul 2009 · letzter Beitrag vom 25. Jul 2009
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Java: Vererbung/Überschreibung

  Alt 24. Jul 2009, 16:49
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:
- Zugriff super.name in einer Methode von Klasse C, die B als unmittelbare Oberklasse hat
- Dies ist einfach eine Abkürzung für((B) this).name!
Allerdings wird doch setData in der der Unterklasse TDNode überschrieben, sodass man auch durch einen Cast nichtmehr an die Methode aus TNode herankommt.

Hierzu hab ich folgendes Beispiel im Web gefunden:
Delphi-Quellcode:
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
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.

Kann mir da jemand weiterhelfen?
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Java: Vererbung/Überschreibung

  Alt 24. Jul 2009, 17:02
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#3

Re: Java: Vererbung/Überschreibung

  Alt 24. Jul 2009, 17:41
gut vielen dank
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Java: Vererbung/Überschreibung

  Alt 24. Jul 2009, 19:05
Zitat von Antigo:
Hier ists ja das gleiche Prinzip. Ich Caste in die Oberklasse und rufe die Methode auf.
Im zweiten Beispiel wird nichts in die Oberklasse gecastet. Casten wäre an den Klammern erkennbar, z.B.:

Ober o = (Ober) u; Im Code steht aber

Ober o = u; 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).

Cheers,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#5

Re: Java: Vererbung/Überschreibung

  Alt 25. Jul 2009, 10:48
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?!
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Java: Vererbung/Überschreibung

  Alt 25. Jul 2009, 11:16
Zitat von mjustin:
Im zweiten Beispiel wird nichts in die Oberklasse gecastet.
Doch, wird es.

Zitat:
damit wird u einfach nur einer kompatiblen Variablen eines Vorfahrtyps zugewiesen,
Was auch als impliziter Cast bezeichnet wird. Implizit, weil man eben nicht die Klammern und den Typen hinschrieben muss, da beide Typen zuweisungskompatibel sind.

Just my 2 cents.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Java: Vererbung/Überschreibung

  Alt 25. Jul 2009, 14:24
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 von http://java.sun.com/docs/books/jls/third_edition/html/conversions.html:
  • Assignment conversion (§5.2, §15.26) converts the type of an expression to the type of a specified variable.
  • ...
  • Casting conversion (§5.5) converts the type of an expression to a type explicitly specified by a cast operator (§15.16).
Nicht, dass das irgendwie relevant wäre .

...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* .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz