我正在寻找一种处理微妙问题的清晰而恰当的方法。技术上是的,我可以简单地忽略它,但这不是重点。
我有一个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方法。我怎么做?这甚至可能吗?或者这是我身边的概念问题?
答案 0 :(得分:1)
你可以选择以下内容:
class BinaryTree<E extends Node>{
public void add(E e){
}
}
class RedBlackTree extends BinaryTree<RedBlackNode>{
@Override
public void add(RedBlackNode e) {
}
}
然后,您可以将任何节点传递到二叉树中,但只将特定节点传递到RedBlackTree
。