1。インターフェイス:クラスをより徹底的に抽象化し、インターフェイスに抽象的なメソッドのみを含めることができる「特別なクラス」。インターフェイスは、クラスの内部状態データを気にせず、クラスのバッチが準拠している仕様を定義します。 (このクラスのバッチで特定の方法を提供する必要があることのみを規定しており、これらの方法を提供すると実際の要件を満たすことができます)。
Javaプログラミング言語では、抽象型であり、抽象的なメソッドのコレクションであり、通常、インターフェイスがインターフェイスとして宣言されます。クラスは、インターフェイスを継承することにより、インターフェイスの抽象的なメソッドを継承します。
インターフェイスはクラスではなく、インターフェイスの書き方はクラスに非常に似ていますが、異なる概念に属します。クラスでは、オブジェクトのプロパティと方法について説明します。インターフェイスには、クラスが実装するメソッドが含まれています。
インターフェイスを実装するクラスが抽象クラスでない限り、クラスはインターフェイス内のすべてのメソッドを定義します。
インターフェイスをインスタンス化することはできませんが、実装できます。インターフェイスを実装するクラスは、インターフェイスに記載されているすべてのメソッドを実装する必要があります。それ以外の場合は、抽象クラスとして宣言する必要があります。さらに、Javaでは、インターフェイスタイプを使用して変数を宣言することができます。これらはヌルポインターになるか、このインターフェイスで実装されたオブジェクトにバインドできます。
定義:[Modifier]インターフェイスインターフェイス名拡張親インターフェイス1、割り当てインターフェイス2、... //親インターフェイス1を拡張します...
{
//複数の定義からゼロ...
//ゼロから複数の抽象インスタンスメソッド定義...
}
[構文の説明]: 1。修飾子は公開または省略できます。パブリックアクセス制御文字が省略されている場合、パッケージアクセス許可です。
2。インターフェイスのすべてのメンバーは、インターフェイスが公開され、すべてのクラスでアクセスできるため、公開されています。インターフェイス内の属性のデフォルトの変更は次のとおりです。属性が記述されているかどうかに関係なく、同じ方法のデフォルトの変更は次のとおりです。デフォルトで追加されます。
3.メンバーにコンストラクターは存在できず、初期化ブロックがありません。
4. Javaソースファイルは、一般に変更されているため、最大1つのインターフェイスでのみ定義でき、保存された名前は公開されたクラスの名前と同じでなければならず、インターフェイスは特別なクラスと見なすことができます。
2。インターフェイス継承:インターフェイスには複数の直接親インターフェイスがあり、インターフェイスはインターフェイスのみを継承するが、クラスは継承できない。
[注]: a。子インターフェイスは親インターフェイスを継承し、親インターフェイスで定義されているすべての抽象的なメソッド、一定の属性、内部クラス、およびその他の定義を取得します。
3。インターフェイスの使用法:構文:[Modifier]クラス名拡張親クラス実装インターフェイス1、インターフェイス2 ... {クラスボディ}。
【予防】
a。説明:クラスは、親クラスと複数のインターフェイスを同時に継承できますが、拡張は実装後に配置する必要があります。
b。インターフェイスはインスタンスを作成することはできませんが、変数を宣言できますが、実装クラスのオブジェクトを参照する必要があります。
c。主な目的は、クラスごとに実装されることです。
d。実装方法:実装キーワードを使用します
e。クラスがインターフェイスを継承した後、これらのインターフェイスで定義されているすべての抽象的なメソッド(つまり、これらのクラスメソッドをサブクラスで書き換える)を完全に実装する必要があります。それ以外の場合、完全に実装されていない場合、このクラスは抽象クラスとしてのみ定義できます。
f。インターフェイスメソッドをオーバーライドする場合、修飾子は親クラスよりも大きくても等しい場合もあるため、パブリックモディファイアでもある必要があります。
g。すべてのインターフェイスタイプ変数は、オブジェクトタイプ変数に直接割り当てることができます。
サンプルコードを投稿します(Li GangのクレイジーなJavaに引用):
//インターフェイス出力インターフェイス出力を定義する{//属性は定数int max_cache_line = 50; //主にストレージスペースを定義することができます。 void getData(StringMSG); } //インターフェイス製品インターフェイス製品を定義する{int getProducetime(int a); } //プリンタークラスが定義されたインターフェイスパブリッククラスプリンターを実装して、出力を実装します。 private int datanum = 0; public void out()//親インターフェイスの出力の方法を書き直します{while(datanum> 0){system.out.println( "print print"+printData [0]); System.ArrayCopy(PrintData、1、PrintData、0、-Datanum); }} public void getData(string msg)//親インターフェイスの出力の方法を書き換えます{if(datanum> = max_cache_line){system.out.println( "full"); } else {printData [datanum ++] = msg; }} public int getProducetime(int a)//親インターフェイス製品の方法を書き換えます{return a = a; } public static void main(string [] args){//親インターフェイスは変数を宣言できますが、インスタンスを作成できませんが、多型:出力の宣言ですが、作成されたインスタンスはプリンター出力o = new Printer()です。 o.getdata( "xiuxiu"); o.out(); //出力メソッドを直接呼び出す//親インターフェイスは変数を宣言できますが、インスタンスを作成できませんが、多型:出力宣言ですが、作成されたインスタンスはプリンター製品P = new Printer()です。 System.out.println(p.getProducetime(82)); //すべてのインターフェイスタイプ参照変数は、オブジェクトタイプ変数オブジェクトobj = pに直接割り当てることができます。オブジェクトobj1 = o; }}4。抽象クラスとインターフェイスの類似点と相違点:
同じ:
1.すべては抽象的なメソッドです。
2.インスタンスを作成することはできません。
3.サブクラスは、それらを継承した後、それらのすべての抽象的なメソッドを実装する必要があります。それらが完全に実装されていない場合、クラスは抽象クラスとしてのみ定義できます。
違う:
1.インターフェイスには抽象的なメソッドのみがあり、抽象クラスには通常の方法しかありません。
2。インターフェイスクラスの属性には、デフォルトでは修飾子publicStaticFinalがありますが、抽象クラスの属性は普通である場合があります。
3.インターフェイスには初期化ブロックがありませんが、抽象クラスで見つかります。
4.インターフェイスには複数の親インターフェイスを持つことができますが、抽象クラスには1つの親クラスのみがあります。
要約します
上記は、Javaのインターフェイスと使用例に関するすべてです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。