覆盖子接口方法
Overriding subinterface methods
是否有任何可表示的示例可以用来覆盖子接口方法?看下面的例子:
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();
}
}
如果 I1
和 I2
都没有实现 foo()
(我们知道它们在 Java 8 之前的版本中没有),它不会I2
再次声明 foo()
没有意义。它相当于 I2
只是一个扩展 I1
.
的空接口
然而,在 Java8 中,有默认方法,允许您为接口方法提供默认实现。您可以在 I1
中有一个 foo()
的默认实现,在 I2
中有一个不同的 foo()
默认实现。在那种情况下,I2
的 foo()
覆盖 I1
的 foo()
.
可能是有意义的
是否有任何可表示的示例可以用来覆盖子接口方法?看下面的例子:
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();
}
}
如果 I1
和 I2
都没有实现 foo()
(我们知道它们在 Java 8 之前的版本中没有),它不会I2
再次声明 foo()
没有意义。它相当于 I2
只是一个扩展 I1
.
然而,在 Java8 中,有默认方法,允许您为接口方法提供默认实现。您可以在 I1
中有一个 foo()
的默认实现,在 I2
中有一个不同的 foo()
默认实现。在那种情况下,I2
的 foo()
覆盖 I1
的 foo()
.