我有一类二叉搜索树:
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
类中的方法AVLTree
以AVLNode
作为参数?
答案 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)
。