假设我有
Interface A {
public void doSomething(Object a);
}
Interface B {
public void doSomething(Foo b);
}
和
Class C implements A, B {
public void doSomething(Object a) { print("a"); }
public void doSomething(Foo b) { print("b"); }
}
我猜调用新C.doSomething(new Foo());
会打印"b"
,即使Foo扩展了Object。
但如果我想要子方法的共同行为呢?
Class C implements A, B {
public void doSomething(Object a) { print("common behavior from " + a ); }
public void doSomething(Foo b) { doSomething((Object) b); }
public void doSomething(Bar c) { doSomething((Object) c);}
}
当我使用doSomething
和Foo
致电Bar
或者他们最终会进入无限循环时,这会有效吗?因为最后做((Object) c) instanceof Bar == true
?
Java如何定义要调用的方法?
答案 0 :(得分:2)
重载解析在编译时发生。 b
或c
的运行时类型无关紧要。只要它们被投放为Object
,它就会调用Object
重载。所以你的例子应该可以正常工作。
另一个常见用例是您希望将文字null
传递给方法,并且需要将其转换为某种类型以避免过载歧义。例如。 c.doSomething((Foo)null)
。