在这种情况下是否可以使用继承? (JAVA)

时间:2010-05-11 03:33:46

标签: java inheritance subclass superclass

我有ClassA和ClassB,ClassA是超类。

ClassA使用NodeA,ClassB使用NodeB。

第一个问题:方法参数。 ClassB需要NodeB类型,但我不能从子类强制转换为超类。这意味着我无法设置NodeB独有的属性。

第二个问题:当我需要将节点添加到ClassB时,我必须实例化一个新的NodeB。但是,我不能在超类中执行此操作,因此我必须重写插入以使用NodeB。

有没有办法绕过它还是我要重写整个事情?

2 个答案:

答案 0 :(得分:1)

我认为,最好的解决方案是使用泛型:将公共代码放在一个(可能是抽象的)公共超类中,比如NodeType参数化。 A和B中的每一个都可以分别子类CommonSuper<NodeA>CommonSuper<NodeB>,并覆盖需要执行特定于其各自节点类型的操作。这样,您的代码中只会有很少的重复,但能够完成您所需要的一切。

答案 1 :(得分:1)

也许你正在寻找这样的东西?

class NodeA { ... }
class NodeB extends NodeA { ... }

class ClassA<N extends NodeA> {
    public Node newNode() { return new NodeA(); }
    public void setProperties(Node n) { setPropertiesA(n); }
}

class ClassB extends ClassA<NodeB> {
    @Override
    public NodeB newNode() { return new NodeB(); }
    @Override
    public void setProperties(NodeB n) { setPropertiesB(n); super.setProperties(n); }
}

这是你要求的,粗略的?

特别注意ClassB如何覆盖addNode以返回子类,并且setProperties被“链接”以在适当时设置NodeB的属性。