編集:私の質問に対する簡単な答えは、Java では 1 つのインターフェイスが他の複数のインターフェイスを拡張できるということです。これは、共通のインターフェイスでインターフェイスをグループ化する方法についての私の論理的な質問に答えるものです. この回答は、だまされた質問には表示されませんでした。また、質問は異なり、インターフェイス グループの作成に関するものではありませんでした。
Javaで、あるインターフェースを他のインターフェースを実装するものとして定義できない理由はありますか? 私が見て不満を抱いている答えは、「インターフェース自体には実装が含まれていないのに、インターフェースが他のインターフェースをどのように実装できるのでしょうか?」というものです。私の意見では、それは弱い答えです。なぜなら、それはシナリオの論理的な解釈というよりも、英語のセマンティクスに賛成だからです。このシナリオの論理的な解釈は、多くのインターフェイスを実装するクラスを定義できるため、それ自体がインターフェイスのコレクションを表すインターフェイスを定義できない理由です。
多くのインターフェイスからなる大規模な共通セットをそれぞれ実装するクラスが多数あるとします。現状では、各クラスのリストを明示的に書き出す必要があります。これは、後で別のインターフェイスを多数のリストに追加する必要がある場合、各クラスを変更する必要があることを意味します。すべてのインターフェースを 1 つの「スーパー インターフェース」に統合すると、プログラマは 1 か所だけで変更を加えることができます。
そして、「インターフェースのリストを実装する抽象スーパークラスを作成し、すべてのサブクラスでそのスーパークラスを拡張する」と答える前に、これらのクラスがまだクラスを拡張していないと仮定できないことに注意してください。implements キーワードの全体的な利点の 1 つは、分類法を変更せずにクラスを適応させることができることですよね?
簡単に言えば、プログラマーは、他のインターフェイスの単なるグループであるインターフェイスを定義できないのはなぜですか? または、より良い質問は次のとおりです。他のインターフェイスを実装するインターフェイスを定義できない場合、他のインターフェイスのグループであるインターフェイスをどのように定義できますか?
コードを好む人のために、私が尋ねているのは、これを行う代わりに...
public class Foo extends ParentClass1 implements IBar1, IBar2, IBar3{
}
public class Baz extends ParentClass2 implements IBar1, IBar2, IBar3{
}
...Javaがこれを許可する方が理にかなっているでしょうか:
public interface IAllBar implements IBar1, IBar2, IBar3{
}
public class Foo extends ParentClass1 implements IAllBar{
}
public class Baz extends ParentClass2 implements IAllBar{
}
そうすれば、後で IBar4 を作成する場合、Foo.java と Baz.java の代わりに IAllBar.java を変更するだけで済みます。
編集:したがって、以下の回答に従って、 IAllBar を定義してこれらすべてのインターフェイスを拡張することができ、必要なものを正確に取得できます。下にジャンプして意地悪な回答を投稿する前に、投稿全体を進んで読んでくれる人がいるのはうれしいです。