Polymorphie

Kiimarii

Mitglied
Hey ich habe ein Problem , und zwar weiß ich nicht warum in dem folgendem Code nur "M" ausgegeben wird:

Java:
class All { /* ....*/ }
class Most extends All { /*......*/}
class Special extends Most { /*......*/}


class Top {
    public void m(All p)
    {
        System.out.println("A ");
    }
}

class Middle extends Top {

    public void m(All p)
    {
        System.out.println("M ");
    }
    public void m(Special p)
    {
        System.out.println("L ");
    }
}

class Bottom extends Middle {

    public void m(Most p)
    {
        System.out.println("V ");
    }
    public void m(Special p)
    {
        System.out.println("X ");
    }
}


class Test {
   public static void run()
   {
   All all = new All();
   Most most = new Most();
   Special special = new Special();

   Top x = new Middle();
   Top y = new Bottom();
   Middle z = new Bottom();

   x.m(most);
   x.m(special);
   y.m(all);
   y.m(special);
   z.m(all);
   z.m(most);
      }
}

Kann mir einer schritt für schritte erklären warum nur "M" ausgegeben wird? Danke!
 
Zuletzt bearbeitet:
Also ich bin auch absoluter Anfänger und das wird mein erster Post hier im Forum aber ich beschäftige mich auch gerade mit Polymorphie in java und ich würde das so beurteilen (zur besseren Übersicht einfach mal als Java Kommentar):

Code:
x.m(most); // Methode m wurde überschrieben in Middle -> dynamisch gebunden an die Methode von Middle -> M
x.m(special); // beim kompilieren wird nur der statische Typ berücksichtigt (x = Top) also wird die Methode m(All p) in Bytecode geschrieben (geht weil special ist ein all). m(Special p) aus Middle überschreibt nicht m(All p) aus Top also Dynamische auflösung an m(All p) von Middle -> M
y.m(all); // Bottom hat keine eigene Methode für 'all' also wird die vererbte Methode von Middle gerufen (die m(All p) von Top überschreibt) -> M
y.m(special); // gleiche Prinzip wie bei x.m(special);
z.m(all); // gleiche prinzip wie y.m(all);
z.m(most); // wieder das gleiche statisch aufgelöst zu m(All p) von Middle. Keine dynamische Bindung an m(Most p) aus Bottom weil nichts überschrieben wird

Aber bestimmt wird es hier welche geben die mehr Ahnung davon haben und es entweder bestätigen oder als völligen Unsinn erklären können ;)
 
dann wird es etwas mühsam.. dann solltest du dich vielleicht erstmal etwas mehr mit Polymorphie beschäftigen?! Gibt es einen Grund warum du dich dann gleich mit diesem Code auseinandersetzt?
 

Kiimarii

Mitglied
Naja bin nicht wirklich ein "Anfänger" kann sehr vieles und verstehe auch wirklich alles ( Lambda, funktionale Interfaces, anonyme Klassen, binaryTrees und was es nicht alles gibt) aber diese Sache stört mich irgendwie, es ist als ob mein Gehirn es einfach nicht richtig verstehen möchte.
 

Flown

Administrator
Mitarbeiter
Auweia das ist ein wenig ein komplexeres Thema, aber hier tritt kein einziges mal dynamic dispatching (dynamische Bindung) auf. Zum Nachlesen in der JLS - wird "Anfänger" nicht helfen: HIER

Hier geht es um die Sichtbarkeit der Methoden: Die Variablen x, y sind vom Typ Top. Dieser beinhaltet nur die Methode (All)void (Notation ist: (Parametertype)Returntype). Darum kann auf ((Top) x) nur die eine Methode aufgerufen werden, da für x,y nur dieser Typ garantiert ist (statische Typ).

Bei der Variable z siehts so aus, dass der statische Typ Middle ist und du nur Methoden aufrufst, die keine (Special)void aufruft. Würdest du noch z.m(special); hinzufügen, würde auch ein 'X' erscheinen. Da zur runtime immer der spezifischste Typ gewählt wird. Da most aber kein Special ist, wird hier die Methode (All)void aufgerufen.

Ich hoffe das bringt etwas Licht in die Sache.
 

mrBrown

Super-Moderator
Mitarbeiter
Die Methode aus Top wird in Middle überschrieben, deshalb greift da trotzdem dynamisches Binden. der statische Typ ist la Top, der dynamische aber nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
T Beispiel Polymorphie, Tier hund = new Hund(); Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
T Polymorphie und LSP Java Basics - Anfänger-Themen 4
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
A Polymorphie Java Basics - Anfänger-Themen 4
O Polymorphie Java Basics - Anfänger-Themen 3
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
C Kurze Frage zur Polymorphie Java Basics - Anfänger-Themen 1
J Polymorphie - Beispielcode Java Basics - Anfänger-Themen 7
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
T Polymorphie Java Basics - Anfänger-Themen 4
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
C Polymorphie Java Basics - Anfänger-Themen 1
L Polymorphie Polymorphie verstehen? Java Basics - Anfänger-Themen 2
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
N Methoden Polymorphie Java Basics - Anfänger-Themen 11
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
E Polymorphie Beispiel Polymorphie Java Basics - Anfänger-Themen 2
K Polymorphie und instanceOf Operator Java Basics - Anfänger-Themen 6
S Vererbung Objekte in verwandten Klassen (Kovarianz, Polymorphie) Java Basics - Anfänger-Themen 4
R Polymorphie Java Basics - Anfänger-Themen 2
M Vererbung Enum Vererbung/Polymorphie Java Basics - Anfänger-Themen 2
P Polymorphie Java Basics - Anfänger-Themen 6
xehpuk Polymorphie Polymorphie in Parametern Java Basics - Anfänger-Themen 5
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 6
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
A OOP Polymorphie Java Basics - Anfänger-Themen 6
2 Interfaces, Polymorphie und Methoden. Java Basics - Anfänger-Themen 14
C OOP Frage zu Polymorphie Java Basics - Anfänger-Themen 4
P Eine Frage begzl. Interface / Polymorphie Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
T Vererbung und Polymorphie Java Basics - Anfänger-Themen 7
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
Z Vererbung oder Polymorphie? Java Basics - Anfänger-Themen 5
J Polymorphie Java Basics - Anfänger-Themen 6
G Polymorphie und Interface Java Basics - Anfänger-Themen 2
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 25
S Polymorphie - oder auch spanisches Dorf? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben