(参考書:Java2実践チュートリアル第5版)
1.インターフェース
キーワードinterfaceを使用して、クラスと同様にインターフェイスを定義します。インターフェイスには、インターフェイス宣言とインターフェイス本体が含まれます。
interface 接口名{
接口体内容;
}
インターフェイス本体:2つの部分が含まれています:定数の宣言(変数なし)と抽象メソッド;インターフェイス本体のメソッドは抽象メソッドのみです。また、インターフェイス本体では、すべての定数のアクセス権はパブリック定数と静的定数である必要があり(パブリックの最終静的修飾子は省略できます)、すべての抽象メソッドのアクセス権はパブリックである必要があります(パブリック抽象修飾子は次のように許可されます)省略)
次に、インターフェースを実装します
(1)クラスはインターフェースを実装します。
クラスが1つ以上のインターフェースを実装することを宣言するには、クラスでキーワードimplementsを使用する必要があります。形式は次のとおりです。
class A (extends B) implements 接口1,接口2{
...;
}
(2)
インターフェイスのメソッドの書き換え非抽象クラスがインターフェイスを実装する場合、このクラスはこのインターフェイスのすべてのメソッドを書き換える必要があります。インターフェイスのメソッドはパブリック抽象メソッドである必要があるため、抽象を削除してメソッド本体を書き出すことに加えて、書き換えられたメソッドはパブリックを追加する必要があります。そうしないと、メソッドのアクセス権が低下します。
クラスの宣言がインターフェイスを実装しているが、インターフェイス内のすべてのメソッドを書き換えない場合、クラスは抽象クラスである必要があります。抽象クラスは、インターフェイス内のメソッドを書き換えるか、インターフェイス内のメソッドを直接所有できます。
(3)インターフェースの詳細
- プログラムはインターフェイス名を使用してインターフェイスの定数にアクセスできますが、クラスがインターフェイスを実装している場合、クラスはクラス本体のインターフェイス定数を直接使用できます。
- インターフェイスを定義するときに、キーワードinterfaceの前にpublicが追加されている場合、インターフェイスは任意のクラスで実装できます。publicが追加されていない場合、フレンドリインターフェイスは同じパッケージ内のクラスでのみ実装できます。
- 親クラスがインターフェースを実装する場合、そのサブクラスは当然インターフェースを実装し、このインターフェースの実装を宣言するためにimplementsを使用する必要はありません。
- 子インターフェースがextendsを介して親インターフェースを継承することを宣言することにより、インターフェースを継承することもできます。インターフェイスの定数とメソッドはパブリックタイプであるため、サブインターフェイスは親インターフェイスのすべての定数とメソッドを完全に継承します
3、インターフェースコールバック
インターフェイスは、インターフェイス変数と呼ばれる変数を宣言することもできます。インターフェイスコールバックとは、インターフェイスを実装するクラスによって作成されたオブジェクトへの参照を、インターフェイスによって宣言されたインターフェイス変数に割り当てることです。次に、インターフェイス変数は、クラスによって実装されたインターフェイスメソッドを呼び出すことができます。 。実際、インターフェース変数がクラスによって実装されたインターフェースメソッドを呼び出すとき、それはこのメソッドを呼び出すように対応するオブジェクトに通知することです。
オブジェクトは、クラスの元のメソッドとクラスによって実装されたインターフェイスメソッドを呼び出すことができますが、インターフェイス変数は、オブジェクトの参照転送を介してのみ、このクラスによって実装されたインターフェイスメソッドを呼び出すことができます。
第四に、インターフェースの役割
(1)インターフェースは、抽象的なメソッドによって表される重要な動作標準を抽象化できます。
(2)インターフェースを実装するクラスのオブジェクトの参照をインターフェース変数に割り当てることができます。インターフェース変数は、クラスによって実装されるインターフェースメソッドを呼び出すことができます。つまり、クラスは、の動作標準に従って特定の動作を提供します。インターフェイス。
(3)インターフェースの考え方は、特定のクラスに同じ名前のメソッドが必要になる可能性があるということですが、メソッドの特定の内容は異なる可能性があります。つまり、インターフェースを実装する必要があります。
5、抽象クラスとインターフェースの違い
(1)抽象クラスのサブクラスは、抽象クラス内のすべての抽象メソッドを書き換える必要があり、インターフェイス変数は、オブジェクトを介してこのクラスによって実装されたインターフェイスメソッドを呼び出します。
(2)インターフェイスでは、一部のクラスに同じ名前のメソッドが必要ですが、これらのクラスに同じ親クラスを強制することはありません。
(3)抽象クラスはすべてのサブクラスにこの関数を持たせる必要があり、インターフェースは状況に応じて特定の関数を実装するためにいくつかのクラスを必要とします。
(4)抽象クラスは物事のクラスの抽象化であり、インターフェースは特定の動作の抽象化。
大体功能:
class abstract 一个具有共性方法的抽象类
interface 数个具有独有方法的接口
具体的功能子类1 extends 抽象类 implements 接口1,接口2
具体的功能子类1 extends 抽象类 implements 接口1,接口3
具体的功能子类1 extends 抽象类 implements 接口2,接口3