问题:现有接口B和C,这两个接口中均包含了方法fun();
interface B{
public double fun();
}
interface C{
public void fun();
}
如果类A实现了B和C接口,那么需要如何实现才不会出错?
关键:一个类实现了两个具有相同名字且不同返回值的方法,如果实现了,则会重载错误。麻烦各位高手解答!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
比如有两个接口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就好了。