2016-07-29 84 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),它沒有任何意義了I2申報foo()再次。它相當於I2只是一個空的接口,延伸到I1

但是,在Java 8中,有一些默認方法,它們允許您爲接口方法提供默認實現。您可以在I1中使用foo()的一個默認實現,並在I2中使用foo()的不同默認實現。在這種情況下,I2foo()可以覆蓋I1foo()

+0

如果'I1#foo()'的契約與I2#foo()'的契約完全不同?在標準庫中,例如參見'Map.entrySet()'和'SortedMap.entrySet()'。他們都雄辯地描述了實現期望的行爲。 –