Ich frag mich gerad wenn ich z.B.
Ist es eigentlich in Java sichergestellt, das bei tc2 und tc3 MyClass.doSomething(MyInterface2 obj) aufgerufen wird, oder
wird MyClass.doSomething(MyInterface1 obj) aufgerufen), weil tc2 und tc3 ja das Interface MyInterface1 implementiert hat? Und wenn letzteres, gibt es eine Möglichkeit, ohne den Funktionnamen zu ändern, tatsächlich MyClass.doSomething(MyInterface2 obj) aufgerufen wird?
Code:
public interface MyInterface1 {
....
}
Code:
public interface MyInterface2 extends MyInterface1 {
....
}
Code:
public class MyClass {
public void doSomething(MyInterface1 obj) {
...
}
public void doSomething(MyInterface2 obj) {
...
}
}
Code:
public class TestClass1 implements MyInterface1 {
...
}
Code:
public class TestClass2 extends TestClass1 implements MyInterface2 {
...
}
Code:
public class TestClass3 extends TestClass2 {
...
}
Code:
public class MainClass
main() {
TestClass1 tc1 = new TestClass1();
TestClass2 tc2 = new TestClass2();
TestClass3 tc3 = new TestClass3();
MyClass mc = new MyClass();
// aufruf von public void doSomething(MyInterface1 obj)
mc.doSomething( tc1 );
// aufruf von public void doSomething(MyInterface1 obj)
// oder doSomething(MyInterface2 obj)
mc.doSomething( tc2 ); // auf ruf von
// aufruf von public void doSomething(MyInterface1 obj)
// oder doSomething(MyInterface2 obj)
mc.doSomething( tc3 );
}
Ist es eigentlich in Java sichergestellt, das bei tc2 und tc3 MyClass.doSomething(MyInterface2 obj) aufgerufen wird, oder
wird MyClass.doSomething(MyInterface1 obj) aufgerufen), weil tc2 und tc3 ja das Interface MyInterface1 implementiert hat? Und wenn letzteres, gibt es eine Möglichkeit, ohne den Funktionnamen zu ändern, tatsächlich MyClass.doSomething(MyInterface2 obj) aufgerufen wird?