假设我们需要使用一个名为“BaseNode”的类来实现不同类型的树,其他类型的节点都从该类派生,并且它假设有一个名为 parent
的实例变量,通常它看起来像:
class BaseNode{
//...some fields
BaseNode parent;
//...other methods
}
现在,如果我要为具有更多成员的 AVL 树派生节点:
class AVLNode extends BaseNode{
//...other useful stuff
}
原始的 parent
(&left
&right
)node 成员仍然是类型 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> {
}
关于java - 如何用自己类型的成员扩展一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50053642/