Java 中类型层次结构的效率
Posted
技术标签:
【中文标题】Java 中类型层次结构的效率【英文标题】:Efficiency with Type Hierarchy in Java 【发布时间】:2012-03-24 15:18:23 【问题描述】:我有一个父类,现在是抽象类,用于二级的四个不同子类。对于其中一个子类,我想创建第三级子类,模拟第二级的两个子类。不过,我不希望将成为它们的父类的类是抽象类或接口,而且我认为仅仅使其具体化不会非常有效。
编辑:高效,我的意思是在给定的情况下,是否有上述选项的替代方案?
是否有任何其他有效的方法来表示这两个类在第二级基本相同?因为解释有点含糊,这里放一张图:
【问题讨论】:
什么是“同级别”?为什么他们处于什么“级别”很重要?有什么问题? @PéterTörök 编辑了问题以使其更加简洁。不过,我相信你已经给了我我需要的答案。谢谢。 在类图中,箭头通常指向父级,它是一个箭头,因为关系的方向是有意义的。 【参考方案1】:你的问题不太清楚。
不过,我不希望将成为它们父级的类是抽象类或接口,而且我认为将其具体化不会非常有效。
好吧,如果你既不想要抽象类、具体类或接口,那恐怕你就不走运了。 Java 在声明/定义类型方面没有其他选择。
此外,Java 不允许多重继承。这意味着如果您希望 Column Major 成为 ColumnMajor Table 和 Table With Deactivate Cell 的子类,则其中至少一个必须是interface
。而且由于在 Java 中接口只能扩展其他接口,这意味着 Table 也必须是 interface
。
【讨论】:
这清除了一切。谢谢你。我觉得最好是在二级做RowMajor和ColumnMajor接口,然后在三级实现。似乎比我正在做的要干净一些。【参考方案2】:在我看来,您正在混合 capabilities 和 classification 的概念。你看,继承并不是所有事情的正确工具。尝试将其中一些类组合起来,而不是子类。例如,“停用”单元格似乎是表格的一种功能,并且可能是一个单独的类,可以组合在表格类中以更改表格的行为方式。看看 strategy 和 state 模式。
【讨论】:
我肯定会研究策略模式。谢谢。【参考方案3】:一般来说,最好通过委托来配置一个类,而不是派生更多的子类。过度使用继承是oo初学者的典型行为。
在您的情况下,方法可能是创建一个类来配置您的实际类集的不同行为。 如果您设计的此类允许可链接,您将获得一个非常灵活、可扩展的架构
【讨论】:
以上是关于Java 中类型层次结构的效率的主要内容,如果未能解决你的问题,请参考以下文章