java - 如何用自己类型的成员扩展一个类?

标签 java class oop inheritance extends

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

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

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

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

}

原始的 parent (&left&right)node 成员仍然是类型 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> {
}

关于java - 如何用自己类型的成员扩展一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50053642/

相关文章:

python - 设置属性和调用就地变异方法之间的区别?

c++ - 表示点\位置的类型或 vector

java - 在 Java 中,如何将 System.out 重定向到 null 然后再次返回到 stdout?

java - 使用 intellij IDEA 从 Selenium + JUnit 生成 ANT 结果报告

java - 似乎无法实现另一个包的接口(interface)

java - 使用 lambda 表达式中的参数调用构造函数

c++ - 使用 C 类将华氏度转换为摄氏度

c++ - C++ 中的 C2276 或 C3867 编译器错误

oop - 如何在 Matlab 中创建高效的实例变量更改器(mutator)?

javascript - 设置间隔() : How to stop then start itself again?