假设我有两个接口:
interface IOne {
public void method();
}
和
interface ITwo {
public void method();
}
具体类实现两个接口:
public class A implements IOne, ITwo {
public void method(){
//some implementation
}
}
我的问题是:
method()
的单个实现是否足以满足IOne和ITwo接口的需要?答案 0 :(得分:4)
如果两个方法都具有相同的签名,就像您的示例中的情况一样,只能实现一个。在这种情况下,无法为两个接口实现该方法的两个版本。所以是的,这个例子就足够了。
如果两个方法的签名相同,但它们具有不同的返回类型,则会导致编译错误。
如果这两种方法具有不同的签名,则可以且必须有两种不同的实现。
答案 1 :(得分:3)
对于1,答案是是。这足以为类中的方法提供一个实现,以便自动实现两个接口。
对于2,如果你需要两个方法,那么你的类不应该实现这两个接口。但是,你可以使用一个技巧:
interface IOne {
void method();
}
interface ITwo {
void method();
}
public class A
implements IOne, ITwo {
// Anonymous inner class that implements ony IOne
private final IOne one = new IOne() {
@Override
public void method() {
System.out.println("IOne");
}
};
// Anonymous inner class that implements ony ITwo
private final ITwo two = new ITwo() {
@Override
public void method() {
System.out.println("ITwo");
}
};
@Override
public void method() {
System.out.println("A");
}
// Method that delegates to IOne
public void methodIOne() {
this.one.method();
}
// Method that delegates to ITwo
public void methodITwo() {
this.two.method();
}
}
测试代码:
A a = new A();
a.method(); // A
a.methodIOne(); // IOne
a.methodITwo(); // ITwo
类A
不需要实现这两个接口。在这种情况下,只是不要在method()
上实现A
并且只保留匿名内部类。
答案 2 :(得分:2)
是。当作为IOne
或ITwo
的实例访问该类时,将调用该方法。
没有。方法的名称,返回类型和参数定义方法的签名,同一类中的两个方法不能具有相同的签名。这样做会导致编译时错误。
我建议的一个解决方案是为IOne.method和ITwo.method使用不同的方法名称,从而使每个方法的签名都是唯一的。这将允许您在单个类中定义两个唯一方法。
答案 3 :(得分:2)
method()的单个实现是否足以满足接口IOne和ITwo的需要?
是。 abstract
方法的实现方式相同。
如果1的答案是肯定的,有没有办法在单个课程中同时获得这两种方法?
没有