7

これで、Java 8 がインターフェイスにデフォルト メソッドと静的メソッドを導入したことがわかりました。インターフェースはもともと Java で導入され、多重継承で C++ で発生し たひし形の問題
を回避しました。

しかし、Java 8 でインターフェースにデフォルト メソッドが導入されたことに加えて、Java は、以前のバージョンでは回避されていたダイヤモンドの問題も導入しました。

デフォルトのメソッドは、強制的にオーバーライドする必要はありません。
ただし、インターフェイスを使用してひし形の問題が発生した場合、それらのインターフェイスを実装するクラスは、既定のメソッドをオーバーライドする 必要があります。

だから今、私は3つの質問を心に留めています:

  1. なぜデフォルトのメソッドが必要なのですか?
  2. インターフェイスにデフォルトのメソッドを持つ代わりに、クラス自体を介して複数の継承を行うことはできませんか?
  3. とにかくJava 8でそれを導入しなければならなかった場合、以前のバージョンでダイヤモンドの問題を回避する必要は何でしたか?

良い説明や説明へのリンクはありますか?

PS私は、これに関する良い記事を含むリンクをインターネット上で見つけられませんでした.
彼らが言ったのは、抽象クラスがより具体性を与えるということだけです。
同様に、抽象クラスはコンストラクターを持つことができますが、インターフェイスはできません。

繰り返しになりますが、抽象クラスがより具体的であり、コンストラクターを持つことができ、
Java がひし形の問題を導入した場合、なぜ今インターフェースを持たなければならないのでしょうか? 抽象クラスは、多重継承のスタンドアロンとして十分ではないでしょうか?

4

3 に答える 3

0
  1. デフォルトのメソッドを使用すると、既存のインターフェースを強化しながら、以前のバージョンのインターフェースとのバイナリ互換性を既存のユーザーに提供できます。

詳細はこちらhttps://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html

于 2015-06-25T12:03:31.437 に答える