Hallo!
Mich interessiert die Systematik, anhand derer im Kontext der Polymorphie entschieden wird, welche von zwei möglichen Methodensignaturen einer überladenen Methode aufgerufen wird.
Gegeben seien zwei Klassen
und
, wobei gilt:
.
Außerdem sei in einer beliebigen Klasse eine überladene Methode mit zwei Signaturen gegeben:
sowie
.
Nun erzeuge ich ein neues B-Objekt mit
und übergebe das Objekt der gennanten Methode mit
.
Theoretisch kommen für diesen Aufruf beide Methodensignaturen in Betracht, weil das B-Objekt auch ein A-Objekt ist. Praktisch wird jedoch die "allgemeinere" Methodensignatur verwendet, also
.
Frage an Euch: Warum? -- Warum verwendet die JVM nicht die "speziellere" Methodensignatur? ???:L
Und: Wo kann ich die Spezifikation dazu nachlesen? :rtfm: -- Wie verhält sich das bei anderen Programmiersprachen?
Vielen Dank & beste Grüße,
Perikles
Mich interessiert die Systematik, anhand derer im Kontext der Polymorphie entschieden wird, welche von zwei möglichen Methodensignaturen einer überladenen Methode aufgerufen wird.
Gegeben seien zwei Klassen
Code:
A
Code:
B
Code:
B extends A
Außerdem sei in einer beliebigen Klasse eine überladene Methode mit zwei Signaturen gegeben:
Code:
public void myMethod(A a)
Code:
public void myMethod(B b)
Nun erzeuge ich ein neues B-Objekt mit
Code:
obj = new B();
Code:
myMethod(obj)
Theoretisch kommen für diesen Aufruf beide Methodensignaturen in Betracht, weil das B-Objekt auch ein A-Objekt ist. Praktisch wird jedoch die "allgemeinere" Methodensignatur verwendet, also
Code:
myMethod(A a)
Frage an Euch: Warum? -- Warum verwendet die JVM nicht die "speziellere" Methodensignatur? ???:L
Und: Wo kann ich die Spezifikation dazu nachlesen? :rtfm: -- Wie verhält sich das bei anderen Programmiersprachen?
Vielen Dank & beste Grüße,
Perikles