2016-07-29 11 views
0

하위 인터페이스 메서드를 재정의하는 것이 유용한 경우가 있습니까? 다음 예를 살펴 보겠습니다 : I2foo()을 선언 모두 I1I2foo()를 구현하지 않는 경우하위 인터페이스 메서드 재정의

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

을 (그리고 우리는 그들이 사전에 자바 8 버전을하지 알고있다), 그것은 이해가되지 않습니다 다시. I2은 단순히 I1으로 확장되는 빈 인터페이스입니다.

그러나 Java 8에는 인터페이스 메소드에 기본 구현을 제공 할 수있는 기본 메소드가 있습니다. 하나의 기본 구현 인 foo()I1에, 다른 기본 구현 foo()I2에 가질 수 있습니다. 이 시나리오에서는 I2foo()I1foo()을 무시할 수 있습니다.

+0

'I1 # foo()'의 계약이'I2 # foo()'의 계약과 완전히 다른 경우 어떻게해야합니까? 표준 라이브러리 (예 : 'Map.entrySet()'과'SortedMap.entrySet()'을 보라. 두 사람 모두 구현에서 예상되는 동작을 웅변 적으로 묘사합니다. –