2016-07-29 24 views
0

Gibt es ein darstellbares Beispiel, in dem es sinnvoll ist, Subinterface-Methoden zu überschreiben? Schauen Sie sich das folgende Beispiel:Überschreiben von Subinterface-Methoden

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

Es ist überhaupt nicht klar, was Sie fragen. – bradimus

+0

@bradimus Für was ist das Überschreiben von Subinterface-Methoden gut? – Chris311

Antwort

0

Wenn beide I1 und I2 nicht foo() implementieren (und wir wissen, dass sie nicht in pre-Java 8-Versionen), macht es keinen Sinn macht für I2foo() zu erklären nochmal. Es entspricht I2 einfach einer leeren Schnittstelle, die I1 erweitert.

In Java 8 gibt es jedoch Standardmethoden, mit denen Sie Standardmethoden für Schnittstellenmethoden bereitstellen können. Sie könnten eine Standardimplementierung von foo() in I1 und eine andere Standardimplementierung von foo() in I2 haben. In diesem Szenario könnte es sinnvoll sein, I2foo()I1 's foo() zu überschreiben.

+0

Was ist, wenn die Verträge von 'I1 # foo()' sich komplett von denen von 'I2 # foo()' unterscheiden? In einer Standardbibliothek, z.B. siehe 'Map.entrySet()' und 'SortedMap.entrySet()'. Beide beschreiben eloquent das Verhalten, das von den Implementierungen erwartet wird. –