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) {
        // ...
    }
}

10-05 21:41