假设我们需要使用一个称为“ BaseNode”的类来实现不同类型的树,从该类派生其他类型的Node,并且它假定具有自己类型的称为parent
的实例变量,通常如下所示:
class BaseNode{
//...some fields
BaseNode parent;
//...other methods
}
现在,如果我要为具有更多成员的AVL树派生Node:
class AVLNode extends BaseNode{
//...other useful stuff
}
原始
parent
(&left
&right
)节点成员仍将是BaseNode
类型,这使我无法实现AVL树。谁能告诉我如何解决这一继承问题?
谢谢!
最佳答案
解决方案1-每当您访问parent
时,都将其强制转换为(AVLNode) parent
。您可以在AVLNode
中编写访问器,以使其更加方便。
class AVLNode extends BaseNode {
public AVLNode getParent() {
return (AVLNode) parent;
}
}
解决方案2-将
BaseNode
设为以子类为参数的通用类。现在,parent
可以是所需的确切类型。class BaseNode<T extends BaseNode<T>> {
T parent;
}
class AVLNode extends BaseNode<AVLNode> {
}