Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Overriding_Binary Search Tree_Avl Tree - Fatal编程技术网

Java-使用继承原始参数的参数重写方法

Java-使用继承原始参数的参数重写方法,java,oop,overriding,binary-search-tree,avl-tree,Java,Oop,Overriding,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){ ...

我有一个二叉搜索树的类:

    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
       }

       ...
    }
我的问题是:

我希望
AVLTree
中的
insert()
方法覆盖
BSTree
中的
insert()
方法,以便从
add()
中调用时,将根据对象的类调用正确的方法


如何从
AVLTree
中的
BSTree
类重写方法
insert
,以
AVLNode
s作为参数?

不能用具有不同签名的另一个方法重写方法。因此,您不能使用smth覆盖
受保护的void insert(BSNode parent,int-side,BSNode child)
,比如
受保护的void insert(AVLNode parent,int-side,BSNode child)
,您必须将实现作为类型参数提供(如果节点是内部类,则必须使用AVLTree.AVLNode)

类AVLTree扩展了BSTree{
受保护的空插入(AVLNode父节点、int侧、AVLNode子节点){
...
}
...
}

classbstree{
受保护的空插入(T_节点父节点、int端、T_节点子节点){
...
}
...
}

只要是像T这样的类型变量,任何名称都是有效的,但在我看来,如果是像“Node”这样的代码,代码的可读性更高。按照惯例,它应该只有一个大写字母。Javadocs的存在是为了解释泛型类型的含义:PI-know,但在本例中,我更喜欢有意义的名称,而不是像N这样的单字母名称(为了更符合约定,可以使用全超级名称,即T_节点(像T_PRED等名称通常在java类中使用))。例如,java.util.Spliterator.OfPrimitive使用T_CONS和T_SPLITR。类型参数名称的约定是使用单个大写字母。使用长名称可能会让真正遵守行业标准命名约定的人感到困惑,因为长名称看起来像其他类型的名称,而不是类型参数。最好抛开个人的特殊理由,做对整个社区有用的事情。没有人是孤岛。不要问钟声为谁而鸣;它为你而鸣。
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
   }

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