当前位置: 首页 > 面试题库 >

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

湛嘉歆
2023-03-14
问题内容

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

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

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

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

}

原始parentleftright)节点成员仍然会类型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> {
}


 类似资料:
  • 我想创建一个自定义的树数据结构,只有节点,我可以迭代他们。然后,我可以扩展这个类,并有非常基本的树 我已经开始工作了,但是当我试图扩展Node类时,问题就来了。对于扩展类,继承的迭代器方法仍然返回节点迭代器,这意味着我每次都要强制转换。下面是我遇到的问题的一个基本示例。让我们建立一个包含整数的树: 是否有一种简单的方法可以解决这个问题,而不需要将iterator()方法从Node类复制到Integ

  • 我有两个类,它们使用了几个相等的方法,所以我想我可以使用一个抽象类而不是一个接口来允许抽象类有方法体,并减少其他类中代码的重复。但是在运行我的主函数时,我得到一个错误,说x是“null”,我认为这是因为它使用了抽象类中的空变量。但是对于抽象类中的方法,我需要声明方法使用的变量,那么如何让它使用子类中的变量呢?具体来说,错误出现在

  • 我正试图用三个额外的日期(时间戳)字段扩展扩展扩展名(新闻),并希望在(新闻)的fluidtemplate中调用这些字段。 我已经连线到目前为止,我可以看到我的后端额外的字段,而无需选择一个外部类型-我已经相应地修改了ext_tables.php,并可以保存数据。 现在,我试图在我的新闻流模板中使用这些字段,在我的Partials/List/Item中使用以下代码。html-{newsItem.d

  • 问题内容: 我正在阅读另一个SO问题,即Swift do-try-catch语法。在他的回答中, rickster 为OP的自定义类创建了扩展。 Konrad77 评论说,这是“保持代码整洁的好方法。” 我尊重他们的知识,这使我相信我在自己的代码中遗漏了一点。 除了为我创建的类创建扩展之外,还有其他好处(除了整洁)还是原因?我可以将相同的功能直接放入类中。如果我是唯一使用该类的人,或者其他人将使用

  • 问题内容: 假设我定义了一个类,该类具有与自己相同类型的变量作为成员。 这实际上有效,令我惊讶的是。 为什么我不应该这样:创建一个实例,它包含一个类型为的变量,其中包含一个类型为的变量,其中包含一个类型为的变量,..... 显然我错了,有人能启发我吗? 问题答案: 您仅声明变量而不创建它。尝试在声明或构造函数中创建它,让我知道会发生什么: 顺便说一句,如果您不是在类中创建它,而是在getter方法

  • 我记得以前AMH自己的论坛里有篇教程有说怎么在AMH中编译自己需要的扩展, 但是现在找不到了. 我目前是需要使用MongoDB, 需要在php中启用MongoDB扩展.