2016-07-29 1 views
0

サブインターフェイスメソッドをオーバーライドすると便利な例はありますか?次の例を見てください:サブインターフェイスメソッドのオーバーライド

public class TestOverridingSubinterfaceMethods { 

    @Test 
    public void testOverrideSubinterfaceMethod() throws Exception { 
     assertThat(new I2Impl().foo(), is(2)); 

    } 

    private class I2Impl implements I2 { 
     @Override 
     public Integer foo() { 
      return 2; 
     } 
    } 

    private interface I1 { 
     Integer foo(); 
    } 

    private interface I2 extends I1 { 
     Integer foo(); 
    } 

} 
+0

あなたが求めていることはまったく明確ではありません。 – bradimus

+0

@bradimusサブインターフェイスのメソッドをオーバーライドするのに適しているのは何ですか? – Chris311

答えて

0

I1I2両方がfoo()を実装していない(と私たちは、彼らが前のJava 8のバージョンではない知っている)場合I2foo()を宣言するために、それは意味がありません。再び。 I2は、単に空のインターフェイスで、I1に拡張されています。

しかし、Java 8では、インターフェイスメソッドに既定の実装を提供するための既定のメソッドがあります。 foo()のデフォルトの実装の1つをI1に、foo()の異なるデフォルトの実装をI2に設定することができます。この場合、I2foo()I1foo()を上書きすることができます。

+0

'I1#foo()'と 'I2#foo()'の契約がまったく異なる場合はどうなりますか?標準ライブラリ(例: 'Map.entrySet()'と 'SortedMap.entrySet()'を参照してください。どちらも実装から期待される動作を雄弁に記述します。 –

関連する問題