根据Java语言规范(JLS):
子签名的概念旨在表达两个方法之间的关系,它们的签名不完全相同,但其中一个可以覆盖另一个。具体而言,它允许一个签名不使用泛型类型的方法来覆盖该方法的任何泛型版本。
此代码基于JLS示例:
根据JLS,我理解为什么前三种方法很好用,但我无法弄清楚为什么
子签名的概念旨在表达两个方法之间的关系,它们的签名不完全相同,但其中一个可以覆盖另一个。具体而言,它允许一个签名不使用泛型类型的方法来覆盖该方法的任何泛型版本。
此代码基于JLS示例:
interface CollectionConverter<U> {
<T> List<T> toList(Collection<T> c);
void fooMethod(Class<?> c);
<E>Comparable<E> method3(E e);
Comparable<U> method4(U u);
}
class Overrider implements CollectionConverter<Integer> {
@Override
public List toList(Collection c) {
return null;
}
@Override
public void fooMethod(Class c) {
}
@Override
public Comparable method3(Object o) {
return null;
}
@Override
// compile error, have to change Object to Integer
public Comparable method4(Object u) {
return null;
}
}
根据JLS,我理解为什么前三种方法很好用,但我无法弄清楚为什么
method4
会出现编译错误:
类型Overrider的方法method4(Object)必须覆盖或实现一个超类型方法。