【发布时间】:2012-02-29 23:22:01
【问题描述】:
我正在尝试以下示例:
class BaseClass {
public void methodA(Class<?> cl) {
System.out.println("Base.methodA()");
}
}
class SubClass extends BaseClass {
public void methodA(Class cl) {
System.out.println("Sub.methodA()");
}
}
public class OverrideEx {
public static void main(String[] args) {
BaseClass b = new BaseClass();
BaseClass s = new SubClass();
b.methodA(Class.class);
s.methodA(Class.class);
}
}
输出: Base.methodA() Sub.methodA()
但是如果我改变骑行方法参数如下:
class BaseClass {
public void methodA(Class cl) {
System.out.println("Base.methodA()");
}
}
class SubClass extends BaseClass {
public void methodA(Class<?> cl) {
System.out.println("Sub.methodA()");
}
}
public class OverrideEx {
public static void main(String[] args) {
BaseClass b = new BaseClass();
BaseClass s = new SubClass();
b.methodA(Class.class);
s.methodA(Class.class);
}
}
我得到编译错误。它说“名称冲突:SubClass 类型的方法 methodA(Class) 与 BaseClass 类型的 methodA(Class) 具有相同的擦除,但不会覆盖它”。
为什么会这样?
【问题讨论】:
标签: java generics overriding