gpt4 book ai didi

java - 通过继承改变方法参数

转载 作者:行者123 更新时间:2023-12-01 09:58:21 25 4
gpt4 key购买 nike

我正在寻找一种清晰且正确的方法来处理一个微妙的问题。从技术上讲,是的,我可以简单地忽略它,但这不是重点。

我有一个 BinaryTree 类,它利用 Node 类型的对象。 BinaryTree 类有一个方法 addNode(Node n),它根据二叉树的规则添加一个新节点

现在我想创建一个 RedBlackTree 类,它使用 RedBlackNode 类型的对象(具有附加颜色字段的节点)并继承自 BinaryTree。我不应该只保留 addNode 方法,因为它允许将普通节点添加到 RedBlackTree,从而导致错误。我可以像这样重载该方法:

class RedBlackTree extends BinaryTree
{
public void addNode(RedBlackNode n)
{
...
}
}

但是另一个方法仍然暴露,理想情况下不应该暴露。我可以像这样重写该方法:

class RedBlackTree extends BinaryTree
{
public void addNode(Node n)
{
if(n instanceof RedBlackNode)
{
...
{
}
}

但是该方法仍然采用普通 Node 作为参数,理想情况下它应该只接受 RedBlackNode (当其他人尝试使用该方法时可能会感到困惑)。

我想要的是继承addNode方法,参数类型从Node变为RedBlackNode。我怎么做?这可能吗?还是我这边的概念问题?

最佳答案

您可以选择如下所示的内容:

class BinaryTree<E extends Node>{
public void add(E e){
}
}

class RedBlackTree extends BinaryTree<RedBlackNode>{
@Override
public void add(RedBlackNode e) {
}
}

然后您可以将任何节点传递到二叉树中,但只能将特定节点传递到 RedBlackTree 中。

关于java - 通过继承改变方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37010640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com