如何使用自己类型的成员扩展类?
假设我们需要使用一个名为“BaseNode”的类来实现不同类型的树,从中派生出其他类型的节点,并且它假设有一个名为其自身类型的parent
实例变量,通常它看起来像:
class BaseNode{ //...some fields BaseNode parent; //...other methods }
现在,如果我要为更多成员的AVL树派生Node:
class AVLNode extends BaseNode{ //...other useful stuff }
原始parent
(& left
和right
)节点成员仍将是BaseNode
类型,这阻止我实现AVL树。 谁能告诉我如何解决这个inheritance问题? 谢谢!
解决方案1 – (AVLNode) parent
访问parent
,将其(AVLNode) parent
为(AVLNode) parent
。 您可以在AVLNode
编写一个访问AVLNode
以使其更方便。
class AVLNode extends BaseNode { public AVLNode getParent() { return (AVLNode) parent; } }
解决方案2 – 使BaseNode
成为将子类作为参数的generics类。 现在parent
可以是所需的确切类型。
class BaseNode> { T parent; } class AVLNode extends BaseNode { }