Raz*_*zib 8 java oop design-patterns interface
假设我有两个接口:
interface IOne {
public void method();
}
Run Code Online (Sandbox Code Playgroud)
和
interface ITwo {
public void method();
}
Run Code Online (Sandbox Code Playgroud)
具体类实现了两个接口:
public class A implements IOne, ITwo {
public void method(){
//some implementation
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
method()对于接口IOne和ITwo ,单个实现是否足够?如果两种方法具有相同的签名(如您的示例中的情况),则只能实现一种实现。在这种情况下,没有办法为两个接口实现该方法的两个版本。所以是的,这个例子就足够了。
如果两个方法的签名相同,但它们具有不同的返回类型,则会导致编译错误。
如果这两个方法具有不同的签名,则可以而且必须有两种不同的实现。
对于1,答案是肯定的。只需为类中的方法提供一种实现即可自动实现两个接口。
对于2,如果您需要同时拥有这两种方法,那么您的类不应该实现这两个接口。但是,您可以使用一个技巧:
interface IOne {
void method();
}
interface ITwo {
void method();
}
public class A
implements IOne, ITwo {
// Anonymous inner class that implements only IOne
private final IOne one = new IOne() {
@Override
public void method() {
System.out.println("IOne");
}
};
// Anonymous inner class that implements only 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();
}
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
A a = new A();
a.method(); // A
a.methodIOne(); // IOne
a.methodITwo(); // ITwo
Run Code Online (Sandbox Code Playgroud)
类A不需要实现这两个接口。在这种情况下,只需不要实现method()并A仅保留匿名内部类即可。