我有一个BinarySearchTree类,该类由AVLTreeRedBlackTree扩展。这两个派生类支持旋转,因此需要使用rotateLeftrotateRight方法。一种方法是在BinarySearchTree中实现这两种方法,以便它们可用于AVLTreeRedBlackTree,但是这些方法不属于BinarySearchTree,因为它不支持旋转。我应该如何用Java处理这种情况?

最佳答案

创建一个中间类abstract class RotatableBinarySearchTree extends BinarySearchTree,让它定义受保护的方法rotateLeftrotateRight,然后使AVLTreeRedBlackTree从RotatableBinarySearchTree而不是BinarySearchTree扩展。

这满足了您在类之间共享具体实现的目标,而不必将代码添加到BinarySearchTree中,后者本身是不可旋转的。如果使用Rotatable接口,则必须在两个子类中都复制逻辑,或者使用某种注入,在我看来对于这种情况而言,这不必要地复杂。

如果您不熟悉抽象类,请参阅Steve在注释中共享的链接。

07-24 21:51