pet*_*rgx 1 java oop inheritance extends class
假设我们需要使用一个名为“BaseNode”的类来实现不同类型的树,从该类派生其他类型的节点,并且它假设有一个称为parent自己类型的实例变量,通常看起来像:
class BaseNode{
//...some fields
BaseNode parent;
//...other methods
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我要为具有更多成员的 AVL 树派生节点:
class AVLNode extends BaseNode{
//...other useful stuff
}
Run Code Online (Sandbox Code Playgroud)
原始parent(& left& right) 节点成员仍然是BaseNode阻止我实现 AVL 树的类型。谁能告诉我我们如何解决这个继承问题?谢谢!
解决方案 1 - 任何时候访问parent,将其转换为(AVLNode) parent. 您可以编写一个访问器AVLNode以使其更方便。
class AVLNode extends BaseNode {
public AVLNode getParent() {
return (AVLNode) parent;
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案 2 - 创建BaseNode一个将子类作为参数的泛型类。现在parent可以是所需的确切类型。
class BaseNode<T extends BaseNode<T>> {
T parent;
}
class AVLNode extends BaseNode<AVLNode> {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |