いくつかのクラスにインターフェイスMyInterfaceを実装していて、それらすべてに抽象クラスMyAbstractClassを拡張してもらいたいです。それを行うための最良の方法は何ですか?
MyAbstractClassを拡張してMyInterfaceを実装する別の抽象クラスを作成するよりも良い方法はありますか?
(投稿する前に、このような質問は見つからなかったことを誓います)
いくつかのクラスにインターフェイスMyInterfaceを実装していて、それらすべてに抽象クラスMyAbstractClassを拡張してもらいたいです。それを行うための最良の方法は何ですか?
MyAbstractClassを拡張してMyInterfaceを実装する別の抽象クラスを作成するよりも良い方法はありますか?
(投稿する前に、このような質問は見つからなかったことを誓います)
最もクリーンな解決策は、インターフェースのJavaDocでそのような要件を定義することです。次に、JavaDocで、「このインターフェースを使用するには、MyAbstractClassから拡張するか、独自の実装を提供する必要があります」のように記述する必要があります。このように、プログラマーは実装に責任があります。これはあなたが専門性を解決しようとする社会学的問題であることを忘れないでください。
別の「解決策」は、インターフェースを削除して抽象クラスを使用することです。抽象クラスにインターフェースを実装することは、ここでは意味がありません。
MyAbstractClass
を実装するように定義してからMyInterface
、他のすべてのクラスを拡張することができMyAbstractClass
ます。
public abstract class MyAbstractClass implements MyInterface {
...
}
public class OneOfSeveral extends MyAbstractClass {
...
}
すべての具象クラスに、実際に定義を変更する以外の方法でMyAbstractClassを拡張するように強制することはできません。
class A implements MyInterface
に
class A extends MyAbstractClass
そしてもちろん
abstract class MyAbstractClass implements MyInterface
ただし、作成するときに別の抽象クラスは必要ありません。
編集:以下のコメントについて:「MyInterfaceのすべての実装がMyAbstractClassを拡張する別の方法が必要です」-それを賢明に強制することはできません。MyInterface
必要に応じて拡張して呼び出す別のインターフェイスを定義できますMyAbstractClassInterface
が、既存のクラスを強制して、この後者のインターフェイスを実装する抽象クラスを拡張することはできませんが、もちろん、このインターフェイスで定義されたメソッドを実際に実装する必要があります..。。
インターフェイスを削除して、抽象クラスに置き換える必要があるように思われます。
乾杯、