类subA是类A的子类。我试图覆盖一个方法,但不知怎的,它不允许我覆盖它。这是为什么?是因为参数?
中的参数读取错误消息:
名称冲突:在subA中添加(E#1)并在A中添加(E#2)具有相同的删除,但是不会覆盖另一个 其中E#1,E#2是类型变量:
E#1扩展了在类subA中声明的Object E#2扩展了在A类中声明的Object
超级A:
public class A <E> {
public void add(E toInsert) {...}
}
SubClass subA:
public class subA <E> extends A {
//overrides the method from A class
public void add (E toInsert) <-- doesn't let me overrides
{...}
}
答案 0 :(得分:7)
您正在继承原始 A
类(未提供通用参数),根据Java语言规范的定义,它会从超类中删除所有通用信息。这意味着您的子类泛型方法与(现在)非泛型超类方法不兼容。
通过传递子类的泛型参数为<{1}}提供通用参数:
A
答案 1 :(得分:0)
C ++编程中的函数重写
如果基类和派生类具有相同名称和参数的成员函数。如果创建派生类的对象并编写代码来访问该成员函数,则仅调用派生类中的成员函数,即派生类的成员函数将覆盖基类的成员函数。 C ++编程中的这个特性称为函数覆盖。
演示C ++编程中函数重写的示例 从派生类访问基类中的重写函数
从派生类,范围解析运算符::访问基类的重写函数。例如:如果要在上面的示例中从派生类访问基类的get_data()函数,则在派生类中使用以下语句。
A :: GET_DATA; //调用A类的get_data()。
这是因为,如果未指定类的名称,编译器会认为get_data()函数正在调用它自己。
覆盖函数中范围解析运算符的用户 - 请参阅:http://www.programiz.com/cpp-programming/function-overriding#sthash.7UmWybpS.dpuf
答案 2 :(得分:-4)
public class subA <E extends A> extends A {
因为E在A中定义,所以你需要让你的泛型扩展相同的泛型A。我相信有人会有比我更好的解释,但我知道这种方式有效。