假设我们需要使用一个称为“ BaseNode”的类来实现不同类型的树,从该类派生其他类型的Node,并且它假定具有自己类型的称为parent的实例变量,通常如下所示:

class BaseNode{
   //...some fields
   BaseNode parent;
   //...other methods
}


现在,如果我要为具有更多成员的AVL树派生Node:

class AVLNode extends BaseNode{
    //...other useful stuff

}


原始parent(&leftright)节点成员仍将是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> {
}

09-04 12:29