如果接口我继承了一个默认方法,其签名是覆盖 - 与I继承的另一个方法等效,那么a 发生编译时错误。 (这是另一种方法的情况 是抽象的或默认的。)
从上面的描述中,下面的代码不应该编译。
然而,当我编译这段代码时,它的工作非常好。
interface A {
void foo(String s);
}
interface B<T> extends A {
default void foo(T x) {
}
}
interface C extends B<String> {
}
为什么要编译?
答案 0 :(得分:5)
如果接口我继承了一个默认方法,其签名与I继承的另一个方法等效,则会发生编译时错误。 (无论另一种方法是抽象的还是默认的,都是这种情况。)
报价指的是以下情况:
interface A {
void foo(String s);
}
interface B<T> {
default void foo(T x) {
}
}
interface C extends A, B<String> {
}
其中C都继承了默认方法和另一个具有相同签名的方法。
在您指定的情况下B#foo
已覆盖A#foo
,因此C只会继承一个方法。