开发者社区 问答 正文

java实现多个接口方法冲突

问题:现有接口B和C,这两个接口中均包含了方法fun();

interface B{
public double fun();
}
interface C{
public void fun();
}

如果类A实现了B和C接口,那么需要如何实现才不会出错?
关键:一个类实现了两个具有相同名字且不同返回值的方法,如果实现了,则会重载错误。麻烦各位高手解答!

展开
收起
蛮大人123 2016-06-01 14:07:58 3500 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    比如有两个接口A和B,它们恰巧有相同的方法f,而且签名相同,但它们却是干不同的事情:

    interface A {
    void f();
    }
    
    interface B {
    void f();
    }

    这样因为方法冲突的缘故,就不宜用一个类来同时实现这两个接口,让一个方法去干两件事情。这种情况可以用内部类开实现其中的一个接口。

    public class C implements A {
    public void f() {
    // A接口的f方法的实现
    System.out.println("A.f()");
    }
    private class BImpl implements B {
    public void f() {
    // B接口的f方法的实现
    System.out.println("B.f()");
    }
    }
    public B getB() {
    return new BImpl();
    }
    // 使用
    public static void main(String[] args) {
    C c = new C();
    A a = c; //C实现了A接口,可以直接向上转型
    a.f();
    B b = c.getB();
    b.f();
    }
    }

    因为BImpl是C的非静态内部类,所以可以访问对C的状态进行修改,效果上和调用C的方法是一样的,而又避免了方法冲突的情况。
    注意到这里的BImpl是private的,除了C类,其他类都不知道BImpl的存在,而getB()方法返回的是B接口的引用,对外,只暴露了B接口,隐藏了BImpl的存在。
    多重继承实现方法是一样的,只是把实现接口换成extends就好了。

    2019-07-17 19:23:13
    赞同 展开评论
问答分类:
问答标签:
问答地址: