2016-07-29 82 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()'。他们都雄辩地描述了实现期望的行为。 –