用泛型错误覆盖方法

时间:2012-06-15 03:10:45

标签: java generics override

我试图覆盖add()但它不会编译

public class AVLTree<E extends Comparable<E>> extends BinaryTree {  
BinaryNode<E> theTree;
    @Override
    public void add (E toInsert)
    {
        if (theTree == null)
    add(toInsert, theTree);     
    }


public class BinaryTree<E extends Comparable<E>> implements Iterable<E> {   
    public void add(E toInsert) { .... }

错误消息

java:36:错误:名称冲突:在AVLTree中添加(E#1)并在BinaryTree中添加(E#2)具有相同的擦除,但是都没有覆盖其他     public void add(E toInsert)                 ^   其中E#1,E#2是类型变量:     E#1扩展了在AVLTree类中声明的Comparable     E#2扩展了BinaryTree类中声明的Comparable

1 个答案:

答案 0 :(得分:4)

根据我的评论,BinaryTreeAVLTree专门化时缺少类型参数。

class BinaryTree<E extends Comparable<E>> implements Iterable<E> {   
    public void add(E toInsert) {
        // ...
    }

    public Iterator<E> iterator() {
        return null;
    }
}

class AVLTree<F extends Comparable<F>> extends BinaryTree<F> {  
    BinaryNode<F> theTree;
    @Override
    public void add (F toInsert)
    {
        // ...     
    }
}

http://ideone.com/dGqd8