首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这种情况下可以使用继承吗?(Java)

在这种情况下可以使用继承吗?(Java)
EN

Stack Overflow用户
提问于 2010-05-11 11:33:46
回答 2查看 139关注 0票数 1

我有ClassA和ClassB,ClassA是超类。

ClassA使用NodeA,ClassB使用NodeB。

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

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

有没有办法绕过它,或者我必须重写整个事情?

EN

回答 2

Stack Overflow用户

发布于 2010-05-11 11:45:21

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

票数 1
EN

Stack Overflow用户

发布于 2010-05-11 11:48:30

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

代码语言:javascript
复制
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的属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2807910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档