如何找出调用方法的接口?

时间:2013-12-01 21:25:56

标签: java

我有一个简单的Java问题。请考虑以下接口:

interface A { 
    void work();
    void a();
}

interface B {
    void work();
    void b();
}

所以当一个类要实现它们时,它应该是这样的:

class Impl implements A, B {
    void work() {
        /*some business*/
    }

    void a() {}
    void b() {}
}

我的问题是,在work方法中,我如何找到它,它是由类型AB调用的?

C#中的上述类就像这样,这很好地区分了两个实现:

class Impl : A, B
{
    void B::work() {}
    void A::work() {}
    void a() {}
    void b() {}
}

但是我如何在Java中实现类似C#模型的东西?!

提前致谢。

5 个答案:

答案 0 :(得分:6)

都不是。 interface的概念是实现它的类,与接口所暗示的“契约”一致。如果你有两个接口,要求实现方法work()和实现两个接口的类,那么它必须实现work()以同意两者的合同。

JavaDoc说:

  

实现接口允许类变得更正式   它承诺提供的行为。接口形成合同   在班级和外部世界之间,这个合同是强制执行的   在构建时由编译器。 如果您的班级声称要实施   接口,该接口定义的所有方法必须出现在其中   在类成功编译之前的源代码。

这正是您通过实施work()方法所做的事情:您同时满足接口AB

答案 1 :(得分:3)

您的界面只会告诉您实现类需要提供的方法的签名。在您的示例中,AB都要求使用work()作为返回类型的方法void。所以基本上他们都要求采用相同的方法。我不知道你怎么可能或需要区分?

答案 2 :(得分:3)

您可能在执行diamand时遇到问题。 你需要自己指定它。

void work() { A.super.work(); } // or B.super.work();

答案 3 :(得分:2)

方法work将满足两个接口的要求。该方法包含在类中,可以实例化两个接口。为了实现接口,类必须拥有接口中指定的方法。如果使用相同的方法来满足多个接口的要求并不重要。

答案 4 :(得分:2)

JVM不会调用A或B,而只调用Impl实现。您可以转换回A或B,并且您的客户端可以根据特定接口中可用的方法调用方法。