2017-10-23 13 views
0

私は、少し異なるソートアルゴリズムを実装するプロジェクトを持っています。Javaでメソッド抽象を呼び出すべきですか?

私はSorterと呼ばれる抽象クラスを作成し、それはサブクラスです:BubbleSortQuickSortCoctailSortSelectionSort

ほとんどすべてのサブクラスは、というメソッド(2つの要素の間の場所を変更する)を持っています(MergeSort以外)。

swap抽象メソッドを定義するのは悪いですか?あるサブクラスで実装されていないか、MergeSortコードを再作成してswapメソッドを追加する必要がありますか?

+1

抽象クラスから 'swap'メソッド定義を削除し、それを別のインターフェースで宣言して、すべての' Sort'クラスが 'MergeSort'のために保存するようにすることができます。 – Mena

+1

クラスが抽象クラスを継承する場合、サブクラスはスーパークラスに存在するすべての抽象メソッドをオーバーライドする必要があります。それはあなたに必要な機能の種類に依存します。 – Karan

+0

私はスワップメソッド抽象を定義していませんでした。そのメソッドはサブクラスで定義されていますが、MergeSortでは定義されていません – Mark

答えて

0

私はこの男https://www.tomdalling.com/blog/software-design/solid-class-design-the-liskov-substitution-principle/は同じ問題があると思います。 1つの解決策は、ソータークラスを拡張するSorterThatNeedSwap *のようなものと呼ばれる1つの抽象クラスを作成し、スワップを必要とするすべてのクラスがそのクラスを拡張できることです。 SorterThatNeedSwapでは、抽象メソッドのスワップを定義することができます。スワップメソッドを必要としないクラスは、Sorterを直接拡張することができます。

0

Javaインターフェイスを使用して、スワップ方法を維持できます。そして、スワップメソッドをオーバーライドする必要がある場所に実装します。インタフェースは100%抽象クラスのように、インタフェース内のすべてのメソッドは暗黙的にpublic暗黙的に抽象です。インタフェースに関するOracleのドキュメントへのリンクに続きます。

https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

0

スワップを呼び出すインターフェイスを試してみてください。 MergeSort以外のすべての種類で、このインターフェイスが実装されています。

関連する問題