我有一个小项目来实现不同的排序算法。
我创建了一个名为Sorter
的抽象类,它的子类是:BubbleSort
,QuickSort
,CoctailSort
,SelectionSort
。
除了swap
之外,几乎所有子类都有名为MergeSort
的方法(在两个元素之间改变位置)。
问题是 - 不定义方法swap
抽象是不好的,因为一个子类没有实现它,或者我应该重做MergeSort
代码并向其添加swap
方法?
答案 0 :(得分:0)
我认为这个人https://www.tomdalling.com/blog/software-design/solid-class-design-the-liskov-substitution-principle/有同样的问题。一种解决方案是创建一个名为SorterThatNeedSwap *的抽象类,它扩展了您的排序器类,然后所有需要交换的类都可以扩展该类。在SorterThatNeedSwap中,您可以定义抽象方法交换。不需要交换方法的类可以直接扩展Sorter。
答案 1 :(得分:0)
您可以使用Java Interface保持交换方法。并在需要覆盖swap方法的地方实现它。接口就像100%抽象类一样,接口内的所有方法都隐式公开隐式抽象。以下链接到有关接口的oracle文档。
https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
答案 2 :(得分:0)
尝试调用Swap的界面。 除MergeSort之外的所有排序都实现此接口。