記事のディレクトリ
インターフェースとは何ですか?
Javaインターフェースは、一連のメソッド宣言であり、いくつかのメソッド特性のコレクションです。インターフェースにはメソッド特性のみがあり、メソッド実装はありません。したがって、これらのメソッドは、さまざまな場所のさまざまなクラスによって実装でき、これらの実装はさまざまな動作をすることができます(特徴)。
インターフェイスは複数のクラスの一般的な仕様であり、インターフェイスは参照データ型であり、最も重要なコンテンツはそのうちの1つである抽象メソッドであることが理解できます。
Java 9のインターフェースには、以下を含めることができます。
1.定数
「メンバー変数」もインターフェースで定義できますが、public staticfinalの3つのキーワードで変更する必要があります。
効果の観点からは、これは実際にはインターフェースの[定数]です。
形式:
public static final data type constant name = data value;
備考:
finalキーワードを変更に使用すると、変更できなくなります。
予防:
- インターフェイスの定数は省略できますpublicstatic final注:記述しない場合も同様です。
- インターフェイスの定数を割り当てる必要があります。それらを割り当てる必要があります。
- インターフェイスの定数の名前は、アンダースコアで区切られた完全に大文字を使用します。(推奨される命名規則)
2.抽象的な方法
Javaのどのバージョンでも、インターフェースは抽象メソッドを定義できます。
形式:
パブリック抽象戻り値タイプメソッド名(パラメーターリスト);
予防:
- インターフェイスの抽象メソッドの場合、修飾子は2つの固定キーワードである必要があります。publicabstract
- これらの2つのキーワード修飾子は、オプションで省略できます。(今日学んだばかりなので、お勧めしません。)
- メソッドの3つの要素は自由に定義できます。
3.デフォルトの方法
Java 8以降、デフォルトのメソッドをインターフェイスで定義できるようになりました。
形式:
パブリックデフォルト戻り値タイプメソッド名(パラメーターリスト){ メソッド本体}
注:インターフェースのデフォルトの方法で、インターフェースのアップグレードの問題を解決できます。
4.静的メソッド
Java 8以降、静的メソッドをインターフェースで定義できるようになりました。
形式:
public static戻り値のタイプメソッド名(パラメーターリスト){ メソッド本体}ヒント:abstractまたはdefaultをstaticに置き換えて、メソッド本体を持ってくるだけです。
5.プライベートメソッド
Java 9以降、プライベートメソッドをインターフェイスで定義できるようになりました。
-
複数のデフォルトメソッド間のコード重複の問題を解決するための通常のプライベートメソッド
形式:
プライベート戻り値タイプメソッド名(パラメーターリスト){ メソッド本体} -
複数の静的メソッド間のコード重複の問題を解決するための静的プライベートメソッド
形式:
プライベート静的戻り値タイプメソッド名(パラメーターリスト){ メソッド本体}
インターフェイスの形式を定義します。
public interface interface name { //インターフェイスコンテンツ} Ps:キーワードinterfaceを置き換えた後も、コンパイルされたバイトコードファイルは.java->。classのままです。
インターフェイスの使用(実装)手順:
- インターフェイスを直接使用することはできません。インターフェイスを「実装」するには、「実装クラス」が必要です。
形式:
パブリッククラスはクラス名を実装しますインターフェース名を実装します{ //… } 1つのクラスは複数のインターフェースを実装することもできますパブリッククラスはクラス名を実装しますインターフェース名1を実装しますインターフェース名1 { //… }
- インターフェイスの実装クラスは、インターフェイス内のすべての抽象メソッドをオーバーライドする必要があります。
実装:abstractキーワードを削除し、メソッド本体の中括弧を追加します。 - 実装クラスのオブジェクトを作成して使用します。
注:
実装クラスがオーバーライドインターフェイスのすべての抽象メソッドをカバーしていない場合、実装クラス自体は抽象クラスである必要があります。
インターフェイスを使用するときは、次の点に注意する必要があります。
- インターフェイスには静的コードブロックまたは構築メソッドがありません!
public interface MyInterfaceA {static {}} x
public interface MyInterfaceA {public MyInterfaceA(){}} x - クラスの直接の親は一意ですが、クラスは同時に複数のインターフェイスを実装できます。形式:パブリッククラスMyInterfaceImplはMyInterfaceA、MyInterfaceBを実装します{//すべての抽象メソッドをオーバーライドして書き換えます}
- 実装クラスによって実装された複数のインターフェース間で抽象メソッドが繰り返される場合は、上書きと書き換えを1回だけ行う必要があります。
- 実装クラスがすべてのインターフェイスのすべての抽象メソッドをオーバーライドしない場合、実装クラスは抽象クラスである必要があります。
- 実装クラスロックによって実装された複数のインターフェイス間に重複するデフォルトメソッドがある場合、実装クラスは競合するデフォルトメソッドをオーバーライドする必要があります。
- 直接の親クラスのメソッドがインターフェイスのデフォルトのメソッドと競合する場合は、親クラスのメソッドが最初に使用されます。
インターフェイス間の多重継承
- クラス間には単一の継承があります。直接の親クラスは1つだけです。
- クラスとインターフェースの間には複数の実装があります。クラスは複数のインターフェースを実装できます。
- インターフェイス間には多重継承があります。
予防:
- 複数の親インターフェースの抽象メソッドが繰り返されるかどうかは関係ありません。
- 複数の親インターフェイスでデフォルトのメソッドが繰り返される場合は、サブインターフェイスをデフォルトのメソッド[およびdefaultキーワード]でオーバーライドする必要があります。
public interface MyInterfaceA {
public abstract void methodA();
public abstract void methodCommon();
public default void methodDefault() {
System.out.println("AAA");
}
}
public interface MyInterfaceB {
public abstract void methodB();
public abstract void methodCommon();
public default void methodDefault() {
System.out.println("BBB");
}
}
public interface MyInterface extends MyInterfaceA, MyInterfaceB {
public abstract void method();
@Override
public default void methodDefault() {
}
}
public class MyInterfaceImpl implements MyInterface {
@Override
public void method() {
}
@Override
public void methodA() {
}
@Override
public void methodB() {
}
@Override
public void methodCommon() {
}
}
上記のMyInterfaceインターフェースにはいくつのメソッドがありますか?4
methodAはインターフェイスAから取得されます
methodBはインターフェイスBから取得されます
methodCommonもインターフェイスAから取得され、B
メソッドはそれ自体から取得されます