Java - 具有相同名称,不同类型的相同参数的两个方法,但这些类型是分层相关的

时间:2016-09-26 23:19:37

标签: java methods overloading

假设我有

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);}

}

当我使用doSomethingFoo致电Bar或者他们最终会进入无限循环时,这会有效吗?因为最后做((Object) c) instanceof Bar == true

Java如何定义要调用的方法?

1 个答案:

答案 0 :(得分:2)

重载解析在编译时发生。 bc的运行时类型无关紧要。只要它们被投放为Object,它就会调用Object重载。所以你的例子应该可以正常工作。

另一个常见用例是您希望将文字null传递给方法,并且需要将其转换为某种类型以避免过载歧义。例如。 c.doSomething((Foo)null)