Według jls-9.4.1.3Dziedziczenie metody równoważne z zastępują podpisów
Jeśli interfejs i dziedziczy sposób domyślny, którego podpis jest zastąpić równoważne z innej metody dziedziczone przez I, a następnie pojawia się błąd czasu kompilacji . (Jest tak w przypadku, gdy inna metoda jest abstrakcyjna lub domyślna.)
Z powyższego opisu następujący kod nie powinien się kompilować.
Jednak, gdy skompiluję ten kod, jego działanie będzie absolutnie w porządku.
interface A {
void foo(String s);
}
interface B<T> extends A {
default void foo(T x) {
}
}
interface C extends B<String> {
}
Dlaczego to się kompiluje?