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 TableTable With Deactivate Cell 的子类,则其中至少一个必须是interface。而且由于在 Java 中接口只能扩展其他接口,这意味着 Table 也必须是 interface

【讨论】:

这清除了一切。谢谢你。我觉得最好是在二级做RowMajor和ColumnMajor接口,然后在三级实现。似乎比我正在做的要干净一些。【参考方案2】:

在我看来,您正在混合 capabilitiesclassification 的概念。你看,继承并不是所有事情的正确工具。尝试将其中一些类组合起来,而不是子类。例如,“停用”单元格似乎是表格的一种功能,并且可能是一个单独的类,可以组合在表格类中以更改表格的行为方式。看看 strategystate 模式。

【讨论】:

我肯定会研究策略模式。谢谢。【参考方案3】:

一般来说,最好通过委托来配置一个类,而不是派生更多的子类。过度使用继承是oo初学者的典型行为。

在您的情况下,方法可能是创建一个类来配置您的实际类集的不同行为。 如果您设计的此类允许可链接,您将获得一个非常灵活、可扩展的架构

【讨论】:

以上是关于Java 中类型层次结构的效率的主要内容,如果未能解决你的问题,请参考以下文章

Scala 类型层次结构

必知|Scala类型层次结构

Eclipse 编译错误:“类名”类型的层次结构不一致

有啥方法可以从 Eclipse 的层次结构视图中隐藏测试类?

Java 8 - 与默认方法和抽象类的接口

在Prolog中定义包含函数类型的类型层次结构