如何使用自己类型的成员扩展类?

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 树的类型。谁能告诉我我们如何解决这个继承问题?谢谢!

Joh*_*ica 5

解决方案 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)