我有一个类TreeNode
,一个扩展了LeafNode
的类TreeNode
和一个扩展了ParentNode
的类TreeNode
。在类ParentNode
中,我有一个返回getChild
的方法TreeNode
。
每当我连续调用getChild
时,我都必须进行大量的向下转换。LeafNode myLeafNode = (LeafNode) ((ParentNode) this.getChild(id1)).getChild(id2)
有没有一种方法可以避免所有这些失败,而无需更改程序的继承结构?
最佳答案
仅当子级具有不适合父级的特定逻辑时,才应扩展类。
我不确定为什么您除了“节点”外还需要什么。 “根”节点的行为与其他每个节点完全相同,如果您假设左右子节点可以为空,则“叶”的行为就像一个节点(具有两个空子节点)
只是一条建议-很好地了解“扩展”,但是要小心使用它,我使项目变得比通过过度使用扩展要困难得多。大多数类倾向于具有非常简单的世系,或者根本没有。
每次您想扩展对象时,我建议您首先考虑is-a / has-a规则,然后即使它是“ is-a”,也要尝试考虑遏制,如果遏制并不难,只需使用那。从长远来看,它将使您的生活更轻松。