2012-05-06 45 views
4

此代码不编译:无法覆盖的方法,因为名称冲突

import java.util.List; 

class A { 
    void foo(List l) { } 
} 

class B extends A { 
    void foo(List<?> l) { } 
} 

然而,下面的代码编译(在d FOO覆盖FOO中C)。为什么?

class C { 
    void foo(List<?> l) { } 
} 

class D extends C { 
    void foo(List l) { } 
} 
+0

请发布编译错误 - 它会使问题更容易回答。 –

+0

OK这里是消息:B中的name clash foo(java.util.List )和A中的foo(java.util.List)具有相同的擦除,但两者都不会覆盖另一个。 – Gmacar

回答

2

第二个例子编译,因为名单<>从列表导出,而不是倒过来这就是为什么第一个例子不能编译。

+0

这是正确的更简短的话 – Justin

+1

这是不正确的一般:字符串扩展对象(但不是另一种方式),但第一个例子会编译。 – Gmacar

+0

@Gmacar - 在这两个示例中,我没有看到字符串或对象。 –