Java - 覆盖方法,其中包含继承原始参数的参数

时间:2017-05-13 18:18:20

标签: java oop override binary-search-tree avl-tree

我有一类二叉搜索树:

    class BSTree<T> {
       ...

       protected void insert(BSNode<T> parent, int side, BSNode<T> child){
          ... // Binary tree insertion logic
       }

       public void add(T data){
          ...
          parent, side, child = search(data) // this line is pseudo code
          insert(parent, side, child) // instance insertion logic
       }

       ...
    }

我的树节点是BSNode类的实例。

我正在实施BSTree - AVLTree类的扩展类,该类正在使用BSNode的扩展 - AVLNode extends BSNode<Integer>

这是AVLTree类:

class AVLTree extends BSTree<Integer>{
   ...

   /* overrides BSTree insert() with slightly different parameters, 
      which inherit from the parameters of the BSTree insert() method */
   protected void insert(AVLNode parent, int side, AVLNode child){
      ... // AVL tree insertion logic
   }

   ...
}

我的问题是:

我希望insert()中的AVLTree方法覆盖insert()中的BSTree方法,这样当从add()内调用时,正确的方法将会根据对象的类来调用。

如何覆盖insert内的BSTree类中的方法AVLTreeAVLNode作为参数?

2 个答案:

答案 0 :(得分:1)

您必须提供实现作为类型参数(如果节点是内部类,则必须使用AVLTree.AVLNode)。

class AVLTree extends BSTree<Integer, AVLNode> {
    protected void insert(AVLNode parent, int side, AVLNode child) {
        ...
    }
    ...
}

class BSTree<T, T_NODE extends BSNode<T>> {
    protected void insert(T_NODE parent, int side, T_NODE child) {
        ...
    }
    ...
}

答案 1 :(得分:-1)

您不能使用具有不同签名的其他方法覆盖方法。因此,您无法使用protected void insert(BSNode<T> parent, int side, BSNode<T> child)之类的smth覆盖protected void insert(AVLNode<T> parent, int side, BSNode<T> child)