我有一个类TreeNode,一个扩展了LeafNode的类TreeNode和一个扩展了ParentNode的类TreeNode。在类ParentNode中,我有一个返回getChild的方法TreeNode

每当我连续调用getChild时,我都必须进行大量的向下转换。

LeafNode myLeafNode = (LeafNode) ((ParentNode) this.getChild(id1)).getChild(id2)

有没有一种方法可以避免所有这些失败,而无需更改程序的继承结构?

最佳答案

仅当子级具有不适合父级的特定逻辑时,才应扩展类。

我不确定为什么您除了“节点”外还需要什么。 “根”节点的行为与其他每个节点完全相同,如果您假设左右子节点可以为空,则“叶”的行为就像一个节点(具有两个空子节点)

只是一条建议-很好地了解“扩展”,但是要小心使用它,我使项目变得比通过过度使用扩展要困难得多。大多数类倾向于具有非常简单的世系,或者根本没有。

每次您想扩展对象时,我建议您首先考虑is-a / has-a规则,然后即使它是“ is-a”,也要尝试考虑遏制,如果遏制并不难,只需使用那。从长远来看,它将使您的生活更轻松。

07-24 19:24