假设我们需要使用名为" BaseNode"的类来实现不同类型的树。从中派生出其他类型的节点,它假设有一个名为parent
的实例变量,它通常看起来像:
class BaseNode{
//...some fields
BaseNode parent;
//...other methods
}
现在,如果我要为更多成员的AVL树派生Node:
class AVLNode extends BaseNode{
//...other useful stuff
}
原始parent
(& left
& right
)节点成员仍然是BaseNode
类型,这阻止我实现AVL树。
谁能告诉我如何解决这个继承问题?
谢谢!
答案 0 :(得分:4)
解决方案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> {
}