Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重写方法_Java_Generics_Overriding - Fatal编程技术网

Java 重写方法

Java 重写方法,java,generics,overriding,Java,Generics,Overriding,subA类是A类的子类。我试图重写一个方法,但不知何故它不允许我重写它。为什么呢?是因为参数中的参数吗 读取错误消息: 名称冲突:subA中的add(E#1)和A中的add(E#2)具有相同的擦除,但两者都不覆盖另一个 其中E#1、E#2是类型变量: E#1扩展了subA类中声明的对象 E#2扩展了类A中声明的对象 超类A: public class A <E> { public void add(E toInsert) {...} } 公共A类{ 公共void add

subA类是A类的子类。我试图重写一个方法,但不知何故它不允许我重写它。为什么呢?是因为参数中的参数吗

读取错误消息:

名称冲突:subA中的add(E#1)和A中的add(E#2)具有相同的擦除,但两者都不覆盖另一个 其中E#1、E#2是类型变量:
E#1扩展了subA类中声明的对象
E#2扩展了类A中声明的对象

超类A:

public class A <E> {    

public void add(E toInsert) {...}

}
公共A类{
公共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    
{...}  

}
公共类subA扩展了{
//重写类中的方法
public void add(E toInsert)
public类subA扩展了{
因为E是在A中定义的,所以您需要将您的泛型扩展为与A相同的泛型类型。我相信有人会有比我更好的解释,但我知道这种方法是有效的。

您正在对原始
A
类进行子类化(未提供泛型参数),根据Java语言规范的定义,它从超类中剥离所有泛型信息。这意味着子类泛型方法与(现在)非泛型超类方法不兼容

通过传递子类的泛型参数,为
a
提供泛型参数:

public class subA <E extends Comparable<E>> extends A<E> {      

    @Override 
    public void add (E toInsert) {
        // ...
    }
}
公共类subA扩展了{
@凌驾
公共无效添加(E到插入){
// ...
}
}

C++程序

中的函数>代码>函数>

如果基类和派生类具有同名和参数的成员函数,则如果创建派生类的对象,然后编写代码访问该成员函数,则只调用派生类中的成员函数,即派生类的成员函数重写C++类的成员函数。ming被称为函数重写

在C++程序设计中演示函数重写的例子 从派生类访问基类中的重写函数

要从派生类访问基类的重写函数,请使用作用域解析运算符::。例如:如果要在上面的示例中从派生类访问基类的get_data()函数,则在派生类中使用以下语句

A::get_data;//调用类A的get_data()

这是因为,如果未指定类的名称,编译器会认为get_data()函数正在调用自身

重写函数中作用域解析运算符的用户
-更多信息请参见:

您需要在继承类型参数时为A提供一个类型参数,就像
公共类subA扩展了A
@TI:这看起来像是一个答案,而不是一个注释。TI的注释是您需要知道的全部内容。但是,将来,您需要知道的不是“它不允许我”,您应该发布编译器报告的确切错误消息。@TI:请快点,因为我们得到了一堆糟糕的答案。@HovercraftFullOfEels-对TI来说太晚了。Bohemian破坏了模式并发布了正确的答案。请在发布答案之前在IDE中尝试您的代码。
public class subA <E extends Comparable<E>> extends A<E> {      

    @Override 
    public void add (E toInsert) {
        // ...
    }
}