subA类是A类的子类。我试图重写一个方法,但是以某种方式,它不允许我重写它。这是为什么?是否因为参数中的参数?
读取错误消息:
名称冲突:subA中的add(E#1)和A中的add(E#2)具有相同的擦除,但是没有一个覆盖另一个
其中E#1,E#2是类型变量:
E#1扩展了在subA类中声明的对象
E#2扩展了在类A中声明的对象
超甲类:
public class A <E> {
public void add(E toInsert) {...}
}
子类subA:
public class subA <E> extends A {
//overrides the method from A class
public void add (E toInsert) <-- doesn't let me overrides
{...}
}
最佳答案
您正在对原始A
类(未提供通用参数)进行子类化,根据Java语言规范的定义,该类会剥离超类中的所有通用信息。这意味着您的子类泛型方法与(现在)非泛型超类方法不兼容。
通过传递子类的通用参数为A
提供通用参数:
public class subA <E extends Comparable<E>> extends A<E> {
@Override
public void add (E toInsert) {
// ...
}
}