我应该用Java调用方法abstract吗?

时间:2017-10-23 15:46:42

标签: java abstract-class

我有一个小项目来实现不同的排序算法。

我创建了一个名为Sorter的抽象类,它的子类是:BubbleSortQuickSortCoctailSortSelectionSort

除了swap之外,几乎所有子类都有名为MergeSort的方法(在两个元素之间改变位置)。

问题是 - 不定义方法swap抽象是不好的,因为一个子类没有实现它,或者我应该重做MergeSort代码并向其添加swap方法?

3 个答案:

答案 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之外的所有排序都实现此接口。