1. ホーム

[解決済み】Javaの抽象インターフェース

2022-04-18 08:59:16

質問

次のような例を考えてみましょう(javaでコンパイルします)。

public abstract interface Interface {
    public void interfacing();
    public abstract boolean interfacing(boolean really);
}

なぜ、インターフェースは抽象的な宣言が必要なのですか?また、抽象的なインターフェイスに適用される他のルールはありますか?


最後に。もし abstract は時代遅れなのに、なぜJavaに含まれているのですか?抽象的なインターフェースに歴史はあるのでしょうか?

どのように解決するのですか?

<ブロッククオート

なぜインターフェースは抽象的な宣言が必要なのですか?

そんなことはない。

public abstract interface Interface {
       \___.__/
           |
           '----> Neither this...

    public void interfacing();
    public abstract boolean interfacing(boolean really);
           \___.__/
               |
               '----> nor this, are necessary.
}

インターフェースとそのメソッドは、暗黙のうちに abstract であり、この修飾子を付けても何も変わりません。

抽象的なインターフェースで適用される他のルールはありますか?

いいえ、同じ規則が適用されます。そのメソッドは、任意の(具象)実装クラスによって実装されなければなりません。

abstractが時代遅れなら、なぜJavaに含まれているのですか?abstractインターフェースに歴史はあるのでしょうか?

面白い質問ですね。を掘り起こしました。 第一 JLSの版では、そこでもこう書かれています。 "この修飾子は時代遅れなので、新しいJavaプログラムでは使用しないでください" .

なるほど。 さらに掘り下げる ... 数々のリンク切れに見舞われた後、なんとかオリジナルのコピーを見つけました オーク0.2 仕様 (または "manual")です。このマニュアルは非常に興味深い内容で、全部で38ページしかありません! :-)

セクション5「インターフェイス」では、次のような例が紹介されています。

public interface Storing {
    void freezeDry(Stream s) = 0;
    void reconstitute(Stream s) = 0;
}

そして、余白にはこう書かれています。

将来的には、インターフェイスでメソッドを宣言する際の " =0" の部分はなくなるかもしれません。

仮定の話 =0 に置き換わりました。 abstract というキーワードを疑っています。 abstract は、ある時期からインターフェイスメソッドに必須となりました


関連記事 Javaです。抽象インターフェースと抽象インターフェースメソッド