web-dev-qa-db-ja.com

Java 9インターフェイスvsクラス

As Java 9では、privateprivate staticインターフェイスのメソッドも、interfaceclassの残りの違いは何でしょうか?また、Javaは多重継承にゆっくりと移行していますか?

40
Aakash

Java 9のプライベートインターフェイスメソッドは、他のプライベートメソッドとまったく同じように動作します。これらは、抽象クラスであっても本体を持つ必要があり、サブクラスによって呼び出されたり、オーバーライドされません。どの(特に多重継承)と言えば、(少なくとも?)次の3種類があります。

  • 型の継承は、1つの型が別の型をbeできることを意味します。 Stringは、Objectです。 Javaは、インターフェースを介して)初日から複数の型の継承を許可しました。
  • 動作の継承は、あるタイプが別のタイプの動作を継承できることを意味します。 Java 8より前は、クラスだけがメソッドを実装できたため、この種の単一の継承しかありませんでした。Java 8メソッド、したがってJava動作の多重継承を与える。
  • 状態の継承は、あるタイプが別のタイプの内部状態(フィールド)を継承することを意味します。現状では(Java 9と、将来Javaバージョン)に現在提案されているすべてのもの)、クラスのみが状態を持つことができるため、この種の単一の継承のみがあります。

プライベートインターフェイスメソッドを見るとわかるように、ここには何も追加しません。

インターフェースとクラスをどのように比較するかという質問に関して、主な違いは2つあります。多重継承と状態です。インターフェイスは前者をサポートし、クラスは後者を持つことができます。状態は典型的なOOPでは一種重要なので、クラスは関連したままです。 ????

インターフェースが特定の非パブリックフィールドまたはストレートアウト自体を定義するように実装を強制する方法がある場合、ゲームは変わり、インターフェースはクラスと競合する可能性があります。

43
Nicolai

プライベートメソッドはサブクラスに継承されないため、この機能は実装クラスに影響しません。インターフェイスのプライベートメソッドを使用すると、既定のメソッド間でコードを共有できると思います。

Javaインターフェースには、非静的メンバーを含めることはできません。これは大きな違いであり、多重継承IMOではありません。

28
xiaofeng.li

Java 9インターフェースには、フィールドとコンストラクターを含めることができません。これにより、クラスとインターフェースに大きな違いが生じるため、Java 9は多重継承にはほど遠い。

20
ZhekaKozlov

バージョン9のJavaインターフェイスにはプライベートメソッドがありますが、静的プライベートです。この機能は、モジュラー方式を可能にするために導入されました。 1つの関数は、長いデフォルトメソッドを使用する代わりに1つの責任で動作する必要があります。複数の継承とは関係ありません。 プライベートメソッドが多くなるほど、クリーンで再利用可能なコードを記述できるようになります。とにかく、パブリックメソッドまたはプロテクトメソッドに関係なく、スタティックメソッドはオーバーライドできません。

2
hi.nitish