通过继承更改方法参数

时间:2016-05-03 17:30:06

标签: 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)
      {
      ...
      {
   }
}

然后该方法仍然将普通节点作为参数,理想情况下它应该只接受RedBlackNode(当他尝试使用该方法时,它可能会混淆其他人)。

我想要的是以参数类型从Node更改为RedBlackNode的方式继承addNode方法。我怎么做?这甚至可能吗?或者这是我身边的概念问题?

1 个答案:

答案 0 :(得分:1)

你可以选择以下内容:

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

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

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