あなたは、インターフェイスのメソッドのデフォルト実装を与えることができます:
public interface I1 {
default void method() {
System.out.println("Test");
}
}
public interface I2 {
default void method() {
System.out.println("Oops");
}
}
両方のインターフェイスを実装するとき、あなたは、次の構文
public class A implements I1, I2 {
@Override
public void method() {
I1.super.method(); //or I2.super.method()
}
}
で起動したいデフォルトの実装を選択することができます
"Test Oops"を印刷する必要がある場合は、2つのデフォルトの実装を呼び出して(注文を選択することもできます)
public class A implements I1, I2 {
@Override
public void method() {
I1.super.method();
I2.super.method();
}
}
編集
のJava 8の前に、あなたが似た何かを達成することができますが、それははるかに冗長です。 (私はここdecoratorのいくつかの種類を使用していますことに注意してください)
public interface I1 {
void m1();
void m2();
void method();
}
public interface I2 {
void m3();
void m4();
void method();
}
public final class DefaultI1 implements I1 {
@Override
public void m1() {
//TODO
}
@Override
public void m2() {
//TODO
}
@Override
public void method() {
System.out.println("Test");
}
}
public final class DefaultI2 implements I2 {
@Override
public void m3() {
//TODO
}
@Override
public void m4() {
//TODO
}
@Override
public void method() {
System.out.println("Test");
}
}
public final class A implements I1, I2 {
private final I1 i1;
private final I2 i2;
public A(I1 i1, I2 i2) {
this.i1 = i1;
this.i2 = i2;
}
@Override
public void m1() {
i1.m1();
}
@Override
public void m2() {
i1.m2();
}
@Override
public void m3() {
i2.m3();
}
@Override
public void m4() {
i2.m4();
}
@Override
public void method() {
i1.method();
i2.method();
}
}
使用
public static void main(String[] args) {
A a = new A(new DefaultI1(), new DefaultI2());
a.method(); //prints "Test Oops"
}
は、デフォルトのメソッドを使用することはできますか?この場合、私はそれぞれのインターフェイスでデフォルトの実装を使用して、あなたが求めているものを達成します。 [this](https://blog.idrsolutions.com/2015/01/java-8-default-methods-explained-5-minutes/) – Dana
いいえ、それはjdk 1.1バージョンです。どうすればいいですか? – snofty
[同じメソッドでクラス内に2つのインタフェースを実装する]の可能な複製。どのインターフェイスメソッドがオーバーライドされますか?](http://stackoverflow.com/questions/2801878/implementing-two-interfaces-in-a-class-with-same-method-which-interface-method) – Paul