假设我们需要使用一个名为“BaseNode”的类来实现不同类型的树,从该类派生出其他类型的节点,并且它假设有一个名为“BaseNode”的实例变量parent
它自己的类型,通常看起来像:
class BaseNode{
//...some fields
BaseNode parent;
//...other methods
}
现在,如果我要为具有更多成员的 AVL 树派生节点:
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 - Make BaseNode
将子类作为参数的泛型类。现在parent
可以是所需的确切类型。
class BaseNode<T extends BaseNode<T>> {
T parent;
}
class AVLNode extends BaseNode<AVLNode> {
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)