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

时间:2018-04-27 00:31:50

标签: java class oop inheritance extends

假设我们需要使用名为" BaseNode"的类来实现不同类型的树。从中派生出其他类型的节点,它假设有一个名为parent的实例变量,它通常看起来像:

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

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

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

}

原始parent(& left& right)节点成员仍然是BaseNode类型,这阻止我实现AVL树。 谁能告诉我如何解决这个继承问题? 谢谢!

1 个答案:

答案 0 :(得分:4)

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