2010-05-11 105 views
1

我有ClassA和ClassB,ClassA是超类。在这种情况下可以使用继承吗? (Java)

ClassA使用NodeA,ClassB使用NodeB。

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

第二个问题:当我需要添加节点到ClassB时,我必须实例化一个新的NodeB。但是,我不能在超类中这样做,所以我不得不重写插入以使用NodeB。

有没有办法解决这个问题,还是我要重写整个事情?

+0

NodeA是NodeB的超类吗? – 2010-05-11 03:43:29

+0

您是否在谈论平行层次?你能更具体吗? – andyczerwonka 2010-05-11 03:46:07

+0

是的,它是一个并行层次结构,是的,NodeA是NodeB的超类 – 2010-05-11 03:49:56

回答

1

我认为最好的解决方案是使用泛型:将通用代码放在一个(可能是抽象的)公共超类中,比方说NodeType。 A和B中的每一个可以分别继承CommonSuper<NodeA>CommonSuper<NodeB>,并覆盖需要执行特定于其单个节点类型的某些内容的位置。通过这种方式,您的代码中只会有很少的重复,但能够完成您所需要的一切。

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的属性。

相关问题