このコードはコンパイルされません:
import java.util.List;
class A {
void foo(List l) { }
}
class B extends A {
void foo(List<?> l) { }
}
ただし、次のコードはコンパイルされます (D の foo は C の foo をオーバーライドします)。なんで?
class C {
void foo(List<?> l) { }
}
class D extends C {
void foo(List l) { }
}