Javaインターフェイスの概念と使用抽象クラスでは、1つ以上の抽象的なメソッドを含めることができます。
インターフェイスキーワードは宣言されます。これは、クラスがどのように行うかを指定するのではなく、クラスが行う必要があることを指定する特別な抽象クラスと見なすことができます。
シリアルコンピューターのハードドライブなど、インターフェイスの多くの例もあります。シリアルATA委員会は、ハードドライブの作成については責任を負いませんが、一般的な仕様のみを指定します。
Seagate、Hitachi、Samsung、およびその他のメーカーは、仕様に応じてインターフェイスを満たすハードディスクを生成します320G Seagateシリアルハードディスクとインストールしてください。
次のコードは、シリアルATA委員会をシミュレートして、次のシリアルハードディスクインターフェイスを定義できます。
//シリアルハードディスクインターフェイスパブリックインターフェイスatahdd {// public static final connect_line = 4;注:インターフェイスで宣言されたメンバー変数はすべてデフォルトでパブリック静的な最終であり、初期化される必要があります。したがって、これらの修飾子は、定数を宣言するときに省略できます。
インターフェイスは、いくつかの定数と抽象的な方法のコレクションであり、現在は抽象クラスに似ていると思われます。実際、インターフェイスは抽象クラスから進化したため、特に指定されていない限り、インターフェイスはクラスと同じ「治療」を享受します。たとえば、複数のクラスまたはインターフェイスをソースプログラムで定義できますが、最大で1つのパブリッククラスまたはインターフェイスがある場合、ソースファイルはパブリッククラスとインターフェイスと同じ名前を取る必要があります。クラスの継承形式と同様に、インターフェイスを継承することもでき、サブインターフェイスは親インターフェイスの定数と抽象的なメソッドを継承し、新しい抽象的なメソッドなどを追加できます。
ただし、インターフェイスには独自の特性があり、次のように要約されています。
1)抽象的なメソッドのみがインターフェイスで定義できます。これらのメソッドは、メソッドを宣言するときに省略できます。インスタンス変数を定義しようとすると、インターフェイス内のインスタンスメソッドと静的メソッドがすべて違法です。例えば:
パブリックインターフェイスSatahdd {//接続ラインの数パブリックコネクトラインpublic Type //データの読み取りstatic string readdata(){//コンピレーションエラー、インターフェイスには静的メソッドのreturn "data"を含めることはできません。3)インターフェイスにはコンストラクターがなく、インスタンス化することはできません。
4)1つのインターフェイスは別のインターフェイスを実装していませんが、他の複数のインターフェイスを継承できます。インターフェイスの多材料機能は、クラスの単一の継承を補います。例えば:
//シリアルハードディスクインターフェイスパブリックインターフェイスatahdd extens a、b {// public final int connect_line = 4; ;}インターフェイスa {public void a();}インターフェイスb {public void b();}インターフェイスを使用する理由
大規模なプロジェクト開発では、親クラスに影響を与えることなくサブクラスが特定の機能を持つようにするために、相続系チェーンの中央からクラスを挿入する必要がある場合があります。たとえば、a-> b-> c-> d-> e、aは祖先クラスです。クラス。しかし、問題は、Javaが別の親クラスのみを継承することができなくなり、継承の親クラスを継承することができます。このようにして、C、D、およびEクラスの修正は、相続チェーン全体に影響を及ぼし、プラグ可能ではありません。
インターフェイスは、挿入可能性の保証です。継承チェーン内のクラスは、インターフェイスを実装できます。インターフェイスは、このクラスのすべてのサブクラスに影響を与えますが、このクラスの親クラスには影響しません。このようなクラスは、このインターフェイスで指定されたメソッドを実装する必要があり、サブクラスはこのクラスからこれらのメソッドを自動的に継承することができ、この時点でこれらのサブクラスはプラグ可能です。
私たちが気にしているのは、特定のクラスではありませんが、このクラスが必要なインターフェイスを実装するかどうかです。
インターフェイスは、補間とメソッドの呼び出しを提供します。
インターフェイスは、オブジェクト指向のJavaプログラミングで重要な役割を果たします。実際、設計段階で最も重要なタスクの1つは、各パーツのインターフェイスを設計し、インターフェイスの組み合わせを介してプログラムの基本的なフレームワーク構造を形成することです。
インターフェイスの使用
インターフェイスの使用は、クラスの使用とは多少異なります。クラスを使用する必要がある場合、新しいキーワードはクラスのインスタンスを構築するために直接使用されますが、インターフェイスが新しいキーワードを直接使用してインスタンスを構築できないため、インターフェイスをこのように使用することはできません。
インターフェイスは、クラスを通じて抽象的なメソッドを実装し、クラスをインスタンス化する必要があります。クラス実装インターフェイスのキーワードは実装です。
クラスがインターフェイスのすべての抽象的なメソッドを実装できない場合、クラスは抽象メソッドとして定義する必要があります。
インターフェイスのインスタンスを作成することは許可されていませんが、インターフェイスタイプの参照変数を定義できます。これは、インターフェイスを実装するクラスのインスタンスを指します。
クラスは1つの親クラスのみを継承することができますが、複数のインターフェイスを実装できます。
実装インターフェイスの形式は次のとおりです。
モディファイアクラスの名前は、親クラスを実装して複数のインターフェイスを実装しています{
実装方法
}
次の例をご覧ください。
static java.lang.system Samsung Hard Disk} //シリアルハードディスクインターフェイスSatahdd {// public static final connect_line = 4; ;}//修理ハードディスクインターフェイスfixhdd {//アドレス文字列= "Haidian District、Beijing"; string readdata(){return "data"; // Samsung Hard Drive Class SamsunghddはSatahddを実装しています。悪い品質のハードディスクは、データを書き込むことができません抽象クラスxxhddはsatahddを実装しています{//データ読み取りpublic string readdata(){return "data"}}}インターフェイスをタイプとして使用します
インターフェイスは、インターフェイスを実装するクラスの任意のインスタンスとして、これらの変数を介して使用できます使用されるクラスメソッドが実際に対応する実装クラスメソッドを呼び出すべきかを判断します。
例は次のとおりです。
public class demo {a a){a.dosth(); a)}インターフェース{public int dosth();} {system.out.println( "now in b");実行結果:
今b
ご覧のとおり、インターフェイスは、インターフェイスをメソッドパラメーターと戻りタイプとして使用して、タイプとして使用できます。
Javaインターフェイスと抽象クラス<BR />クラスの違いはオブジェクトテンプレートであり、抽象クラスとインターフェイスは、コンクリートクラスのテンプレートと見なすことができます。
特定の観点からは、インターフェイスは特別な抽象クラスであるため、深いつながりがあり、優れた類似点があるため、誰を使用するかについて簡単に混乱することができます。まず、彼らが持っている類似点を分析します。
それらはすべて、木のような構造の抽象的な層を表しています。参照変数を使用する場合、クラス構造の抽象レイヤーを使用して、メソッドの定義と実装を分離してください。
それらのどれもインスタンス化することはできません。
すべてが抽象的なメソッドを含めることができます。抽象的なメソッドは、特定の実装を気にすることなく、システムが提供する機能を説明するために使用されます。
抽象クラスとインターフェイスの主な違いについて話しましょう。
1)クラスは、これらのメソッドの繰り返しの実装を提供し、コードの再利用性を改善することができます。
public abstract class A {public abstract void method1(); public void method2(){// a method2}} public class bは{public void method1(){// b method1}} public class cを拡張しますmethod1(){// c method1}}要約クラスAには2つのサブクラスBとCがあります。Aはメソッドメソッド2の実装を含んでいるため、Method2メソッドはサブクラスBとCで書き換える必要はありません。サブクラスの動作。 Method2は、再利用可能なコードの例です。 Aは、Method1の実装を定義しません。つまり、BとCは、緩い結合の特性を反映する独自の特性に従ってMethod1 Methodを実装できます。
インターフェイスに変更してください。
パブリックインターフェイスa {public void method1(); public void method2();} public class bは{public void method1(){// b method1} public v oid method2(){// b method2}} {public void method1(){// c method1} public void method2(){// c method2}}インターフェイスAは、クラスBとCを実装するためのパブリック機能を提供できません。つまり、AはBとCの動作を制約することはできません。 BとCは、特性と現実的な方法1およびMethod2メソッドを自由に行使でき、インターフェイスAには制御能力がありません。
2)クラスは直接の親クラス(おそらく抽象クラス)のみを継承できますが、クラスは複数のインターフェイスを実装できます。これはインターフェイスの利点です。
インターフェイスa {public void method2();}インターフェイスb {public void method1();} class cはa、b {public void method1(){// c method1} publ icoid method2(){// c method2} {// c method2} {// c method2} } // cは非常に柔軟に使用でき、Cには他のインターフェイスa = new C();抽象クラスA {public abstract void method1();}要約クラスBはa {public abstract void method2();} class cを拡張します。cはb {public void method1(){// c method1} public void method2(){// c method2}}} {// c method1}クラスCの場合、他の親クラスを継承する機会はありません。
要約すると、インターフェイスと抽象的なクラスには、インターフェイスと抽象クラスの選択において、次のようになります。
行動モデルは常に抽象クラスではなくインターフェイスを通じて定義する必要があるため、通常、インターフェイスが推奨され、抽象クラスはできるだけ少数に使用する必要があります。
抽象クラスを選択する場合、通常は次の状況です。サブクラスの動作を定義し、サブクラスに一般的な機能を提供する必要があります。