Java - 两个方法名称相同,参数相同但类型不同,但类型在层次上相关

Java - Two methods with same name, same argument of different type, but the types are related hierarchically

假设我有

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

}

我猜调用 new 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);}

}

当我用 FooBar 调用 doSomething 时,这会起作用吗?或者它们会因为最后做 ((Object) c) instanceof Bar == true 而陷入无限循环吗?

Java如何定义调用哪个方法?

重载解析发生在编译时。 bc 的运行时类型是什么并不重要。只要将它们转换为 Object,它就会调用 Object 重载。所以你的例子应该可以正常工作。

另一个常见的用例是你想将文字 null 传递给一个方法,你需要将它转换为某种类型以避免重载歧义。例如。 c.doSomething((Foo)null).