Polymorphie-Verständnis

KogoroMori21

Aktives Mitglied
[CODE lang="java" title="Y1"]public class Y1{
protected EinUndAusgabe io =
new EinUndAusgabe();
public void test(){
io.ausgeben("1\n");
}
}[/CODE]

[CODE lang="java" title="Y2 extends Y1"]public class Y2 extends Y1{
@Override
public void test(){
io.ausgeben("2\n");
}

public void do1(){
io.ausgeben("y2:do1 ");
test();
}

public void do2(){
io.ausgeben("y2:do2 ");
super.test();
}

public void do3(){
io.ausgeben("y2:do3 ");
do4();
}

public void do4(){
io.ausgeben("3\n");
}
}[/CODE]

[CODE lang="java" title="Y3 extends Y2"]public class Y3 extends Y2{
@Override
public void do1(){
io.ausgeben("y3:do1 ");
test();
}

@Override
public void do2(){
io.ausgeben("y3:do2 ");
super.do3();
}

@Override
public void do3(){
io.ausgeben("y3:do3 ");
super.do2();
}

@Override
public void do4(){
io.ausgeben("y3:do4 ");
do2();
}
}[/CODE]

1625930435278.png
Guten Tag liebes Java-Forum,
ich kriege ein error für x3.do2() und für x3.do4() doch ich verstehe leider nicht so ganz warum, laut meinem Verständnis müsste für

x3.do2():
"y3:do2 y2:do3 3"
rauskommen und für

x3.do4():
"y3:do4 y3:do2 y2:do3 3"
rauskommen.

Doch stattdessen kriege ich eine Error-Meldung und es wird nichts geprintet...
 
Beste Antwort
Java:
public class Y2 extends Y1 {
  ...
  public void do3(){
    io.ausgeben("y2:do3 ");
    do4(); // <- ist _auch_ ein dynamisch "dispatchter" Aufruf!
  }
  ...
}
Du hast dort eine Endlosrekursion, weil der Aufruf von this.do4() innerhalb der Methode Y2.do3() eben auf dem Laufzeittyp des aktuellen this-Objektes aufgerufen wird und dieser Laufzeittyp ist ja nach wie vor Y3 und Y3 definiert ebenfalls eine do4() Methode, überschreibt also die von Y2.

Bei nicht-private Instanzmethoden wird also immer die am meisten überschriebene Methode in der Typhierarchie des Empfängerobjektes des Methodenaufrufes ausgeführt. Der Empfänger des Aufrufes do4() ist implizit this...

httpdigest

Top Contributor
Java:
public class Y2 extends Y1 {
  ...
  public void do3(){
    io.ausgeben("y2:do3 ");
    do4(); // <- ist _auch_ ein dynamisch "dispatchter" Aufruf!
  }
  ...
}
Du hast dort eine Endlosrekursion, weil der Aufruf von this.do4() innerhalb der Methode Y2.do3() eben auf dem Laufzeittyp des aktuellen this-Objektes aufgerufen wird und dieser Laufzeittyp ist ja nach wie vor Y3 und Y3 definiert ebenfalls eine do4() Methode, überschreibt also die von Y2.

Bei nicht-private Instanzmethoden wird also immer die am meisten überschriebene Methode in der Typhierarchie des Empfängerobjektes des Methodenaufrufes ausgeführt. Der Empfänger des Aufrufes do4() ist implizit this und der Laufzeittyp von this in deinen zwei Aufrufen ist jeweils beide Male Y3.

Somit wird die Überschreibung von Y3.do4() aufgerufen und nicht Y2.do4(), was du vermutetest.
 
Beste Antwort

Jw456

Top Contributor
Also nach meinem Verständnis geht es nicht in einer Methode die Superklasse Methode einer anderen aufzurufen.

In einer override Methode kannst du die original super. Methode aufrufen aber nicht aus einer anderen.
 
K

kneitzel

Gast
Also nach meinem Verständnis geht es nicht in einer Methode die Superklasse Methode einer anderen aufzurufen.

In einer override Methode kannst du die original super. Methode aufrufen aber nicht aus einer anderen.
Also du kannst aus einer Methode eine andere Methode der Klasse aufrufen, von der Du abgeleitet hast.

Das siehst Du ja zum einem beim TE:
Java:
 public void do2(){
 io.ausgeben("y2:do2 ");
 super.test();
 }

Er konnte es übersetzen und ausführen (Und zu einer StackOverflowException kommen).

Man kann es aber auch jederzeit austesten. (Also einfach mal selbst ein paar kleine Testklassen schreiben :) )

Oder man schaut sich die JLS an. In 15.12 wird beschrieben, wie so ein Aufruf aussehen kann:
 
Ä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
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
K Polymorphie Java Basics - Anfänger-Themen 6
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
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
K nur für das verständnis Java Basics - Anfänger-Themen 3
B Verständnis Frage zu der Aufgabe Java Basics - Anfänger-Themen 30
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
J Code Verständnis Java Basics - Anfänger-Themen 9
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
Y MVC MouseEvent Verständnis Java Basics - Anfänger-Themen 24
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M If Verständnis Problem Java Basics - Anfänger-Themen 2
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
D Hilfe bei Verständnis von Aufgabe Java Basics - Anfänger-Themen 1
I Verständnis Frage wegen einer Aufgabe Java Basics - Anfänger-Themen 10
P verständnis Frage Refernzen und Objekte Java Basics - Anfänger-Themen 1
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J java syntax verständnis Java Basics - Anfänger-Themen 6
M Verständnis von Deadlocks Java Basics - Anfänger-Themen 2
C Klassen/Objekte Verständnis Java Basics - Anfänger-Themen 8
O Singleton Verständnis Java Basics - Anfänger-Themen 4
C Allgemeines Verständnis For-Schleife Java Basics - Anfänger-Themen 3
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
R Input/Output MVC - Frage zum Verständnis Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
X Kompilat verständnis Frage Java Basics - Anfänger-Themen 9
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
H Überladen Verständnis Java Basics - Anfänger-Themen 3
J Compiler-Fehler Verständnis Problem bei Compiler-Warning Java Basics - Anfänger-Themen 7
E Verständnis zu einem Rekursionsbeispiel Java Basics - Anfänger-Themen 12
F Verständnis Frage - && Java Basics - Anfänger-Themen 2
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
JavaKaffee Minimax-Algorithmus Verständnis Java Basics - Anfänger-Themen 12
C Methoden Frage zu Verständnis eines Beispiels Java Basics - Anfänger-Themen 3
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
M Verständnis Frage Java Basics - Anfänger-Themen 11
M Verständnis-Probleme mit eigenen Klassen Java Basics - Anfänger-Themen 2
T Verständnis von "final" und "static" Java Basics - Anfänger-Themen 6
U ADT verständnis Problem Java Basics - Anfänger-Themen 18
S Java Verständnis Problem Methoden etc. Java Basics - Anfänger-Themen 22
F ArrayList() Verständnis Java Basics - Anfänger-Themen 14
M Verständnis von PrintWriter Java Basics - Anfänger-Themen 12
M Verständnis einiger Zeilen Java Basics - Anfänger-Themen 4
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben