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

标签 java inheritance methods parameters

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

我有一个 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/

相关文章:

javascript - jQuery 获取 "event invoking"元素

java - Clojure JDBC 一次事务中的不同数据库连接

java - 自 OpenQuant 消亡以来,是否有免费的实时财务数据馈送?

c++ - C++ 中的非虚拟多态性

inheritance - F# 和继承建模

c++ - 使用模板调用类的函数

java - 使用 TextArea.append() 时出现 NullPointerException

java - 在Android中,如何解析字符串或其他变量类型?

c++ - 派生模板类访问基类成员数据

java - 第一个Java程序: Random data in my Array?