模棱两可的多态性?

Mik*_*per 4 java oop polymorphism

在两个接口应用于对象的情况下,有两个重载方法只是通过区分这些接口而不同,哪个方法被调用?

在代码中.

interface Foo {}
interface Bar {}

class Jaz implements Foo, Bar {}

void DoSomething(Foo theObject)
{
    System.out.println("Foo");
}

void DoSomething(Bar theObject)
{
    System.out.println("Bar");
}

Jaz j = new Jaz();
DoSomething(j);
Run Code Online (Sandbox Code Playgroud)

将调用哪种方法?DoSomething(Foo)还是DoSomething(Bar)?两者都没有比另一个更具体,我认为没有理由为什么应该调用一个而不是另一个,除了一个被指定为first/last.

编辑:使用这种类型的代码是可以强制一种或另一种方法?

Cli*_*int 12

这应该是编译器错误.

这有效:

DoSomething((Foo)j);
DoSomething((Bar)j);
Run Code Online (Sandbox Code Playgroud)


lc.*_*lc. 10

我很确定上面的内容不会编译.DoSomething(j)是一个模棱两可的电话,将导致错误.

为了得到它来编译,你必须明确投j作为FooBar当你调用DoSomething,例如DoSomething((Foo)j).