为什么java不会允许这种覆盖? 有什么东西我不见了吗?
class Abc
{
public void add (List<String> li)
{
}
}
public class Test extends Abc {
public static void main(String args[])
{
}
@Override
public void add (List<Object> li)
{
}
虽然如果删除
,它确实允许该方法覆盖<Object>
并且在过度骑行方法中写出列表li,其实际上与
相同List<Object>
另外,如果过度骑行和重载方法中的List具有相同的类型,则允许覆盖。
List<String> - over-ridden method
List<String> - over-riding method
答案 0 :(得分:1)
这是Generics在Java中设计的一个限制(设计漏洞?bug?)。
您的期望是合理的,但他们决定实施(和定义)泛型的方式使其变得不可行。
但是,如果你考虑一下,他们的设计可能比你的期望更合理:实际上,List<String>
可能无法直接转换为List<Object>
- 必须创造一个整体新List
,复制内容。