Ich hoffe, das ist das richtige Forum, wenn nicht bitte verschieben
Die Grundprinzipien von Vererbung und Polymorphie sind mir klar.
Allerdings gibt es da ein Phänomen, das ich mir nicht erklären kann. Am besten ich erklärs mit nem Beispielcode:
Es gibt 3 Klassen, eine Vaterklasse A, eine Unterklasse B und eine auszuführende Klasse C:
[highlight=Java]public class A{
public void test(A a){
System.out.println("Methode in A wurde aufgerufen");
}
}
[/highlight]
[highlight=Java]public class B extends A{
public void test(B b){
System.out.println("Methode in B wurde aufgerufen");
}
}
[/highlight]
[highlight=Java]public class C{
public static void main(String[] args){
A ref1 = new B();
B ref2 = new B();
ref1.test(ref2);
}
}
[/highlight]
Was ich daran nicht verstehe, ist wieso die Methode in A aufgerufen wird. Mir ist klar, dass wegen der unterschiedlichen Signatur nichts überschrieben wird.
Eine Möglichkeit wäre, dass, weil ref1 eine Variable von Typ A ist, das ganze implizit zu A gecastet wird. Dann würden doch aber gar keine Funktionen aus B zur Verfügung stehen, was aber nicht der Fall ist (wenn ich die Methoden z.B. überschreiben lasse, indem ich die Parameter wegnehme, wird immer die Methode aus Klasse B ausgeführt).
Bin für jede Hilfe dankbar :rtfm:
Die Grundprinzipien von Vererbung und Polymorphie sind mir klar.
Allerdings gibt es da ein Phänomen, das ich mir nicht erklären kann. Am besten ich erklärs mit nem Beispielcode:
Es gibt 3 Klassen, eine Vaterklasse A, eine Unterklasse B und eine auszuführende Klasse C:
[highlight=Java]public class A{
public void test(A a){
System.out.println("Methode in A wurde aufgerufen");
}
}
[/highlight]
[highlight=Java]public class B extends A{
public void test(B b){
System.out.println("Methode in B wurde aufgerufen");
}
}
[/highlight]
[highlight=Java]public class C{
public static void main(String[] args){
A ref1 = new B();
B ref2 = new B();
ref1.test(ref2);
}
}
[/highlight]
Was ich daran nicht verstehe, ist wieso die Methode in A aufgerufen wird. Mir ist klar, dass wegen der unterschiedlichen Signatur nichts überschrieben wird.
Eine Möglichkeit wäre, dass, weil ref1 eine Variable von Typ A ist, das ganze implizit zu A gecastet wird. Dann würden doch aber gar keine Funktionen aus B zur Verfügung stehen, was aber nicht der Fall ist (wenn ich die Methoden z.B. überschreiben lasse, indem ich die Parameter wegnehme, wird immer die Methode aus Klasse B ausgeführt).
Bin für jede Hilfe dankbar :rtfm:
Zuletzt bearbeitet: