1. クラスの宣言で、キーワード extends を使用してクラスのサブクラスを作成します。クラスは、キーワードimplementsを通じて1つ以上のインターフェースを使用することを宣言します。
拡張とは、特定のクラスを継承することを意味します。継承後、親クラスのメソッドを使用することも、親クラスのメソッドをオーバーライドすることもできます。実装とは、通常、複数のインターフェイス メソッドを実装する前に書き換える必要があることを意味します。使用済み。
2. Extends は、クラスが Final として宣言されていない場合、またはクラスが Abstract として定義されている限り、継承できますが、この場合、インターフェイスを使用して実装できます。実装は使用する必要があります。継承はクラスを継承することしかできませんが、実装は複数のインターフェイスを実装できます。たとえば、それらをカンマで区切ります。
次のようにコードをコピーします。
クラス A は B を拡張し、C、D、E を実装します
長い間勉強した結果、今日ようやく実装を理解できました。次の例を見てください。
インターフェイスのいくつかの概念
<!--[if !supportLineBreakNewLine]-->
次のようにコードをコピーします。
パブリックインナーフェイスランナー
{
int ID = 1;
ボイドラン();
}
インターフェース動物はランナーを拡張します
{
void Breath();
}
クラス 魚具 動物
{
public void run()
{
System.out.println("魚が泳いでいる");
}
パブリックボイドブリーザー()
{
System.out.println("魚が泡立っている");
}
}
抽象的な LandAnimal は動物を実装します
{
公開ボイドブリーザー ()
{
System.out.println("LandAnimal は呼吸しています");
}
}
クラス Student を拡張 パーソンが Runner を実装
{
...
public void run()
{
System.out.println("生徒は走っています");
}
...
}
インターフェース チラシ
{
void fly();
}
クラス Bird は Runner、Flyer を実装します
{
public void run()
{
System.out.println("鳥が走っています");
}
パブリック void fly()
{
System.out.println("鳥が飛んでいます");
}
}
クラス TestFish
{
public static void main (String args[])
{
フィッシュ f = 新しいフィッシュ();
int j = 0;
j = ランナー ID;
j = f.ID;
}
}
インターフェースの実装に関する注意事項:
a. インターフェイスを実装するとは、インターフェイスのすべてのメソッド (抽象クラスを除く) を実装することになります。
b. インターフェース内のメソッドは抽象的です。
c. 複数の無関係なクラスが同じインターフェイスを実装でき、1 つのクラスが複数の無関係なインターフェイスを実装できます。
================================================= =========
拡張と実装の違い
extends は、クラスがfinalとして宣言されていない場合、またはクラスがabstractとして定義されている限り、継承できますが、この場合、インターフェイスを使用して実装できます。継承は 1 つのクラスのみを継承できますが、実装はカンマで区切るだけで複数のインターフェイスを実装できます。
クラス A は B を拡張し、C、D、E を実装します
クラスは、キーワードimplementsを通じて1つ以上のインターフェースを使用することを宣言します。クラス宣言で、キーワード extends を使用してクラスのサブクラスを作成します。
次のようにコードをコピーします。
クラスのサブクラス名は親クラス名を拡張し、インターフェイス名を実装します
{...
}
================================================= =========
A a = new B(); 結果として、a はクラス A のインスタンスとなり、A 内のメソッドにのみアクセスできます。では、A a = new A(); の違いは何でしょうか?
================================================= ========
クラス B は A を拡張します
通常、継承後、親クラスにない一部のメンバーまたはメソッドが定義されます。
A a = 新しい B();
大丈夫です、アップロードしてください。
a は親クラス オブジェクトのインスタンスであるため、サブクラスによって定義された新しいメンバーやメソッドにアクセスできません。
================================================= ========
このように定義した場合:
クラスA{
int i;
void f(){}
}
クラス B は A{ を拡張します
int j;
void f(){}//書き換え
void g(){}
}
それから:
B b = 新しい B();
b はサブクラス オブジェクトのインスタンスです。それ自体のプロパティとメソッドだけでなく、親クラスのプロパティとメソッドにもアクセスできます。 bi、bj、bf()、bg() などはすべて合法です。このとき bf() はアクセスされる B の f() です
A a = 新しい B();
a は B のコンストラクターを使用しますが、アップキャスト後は親クラス オブジェクトのインスタンスになり、サブクラスのプロパティやメソッドにアクセスできません。 ai,af() は合法ですが、aj,ag() は違法です。このとき、af() へのアクセスは B の f() へのアクセスとなります。
================================================= ========
A a = new B(); このステートメントには実際には 3 つのプロセスがあります。
(1) ああ;
を親クラス オブジェクトとして宣言します。これは単なる参照であり、スペースは割り当てられません。
(2) B 温度 = 新しい B();
クラス B オブジェクトのインスタンスは、クラス B のコンストラクターを通じて確立されます。つまり、初期化されます。
(3) a = (A) 温度;
サブクラス オブジェクト temp を親でないクラス オブジェクトに変換し、それを a に割り当てます。これは安全なアップロード (アップキャスト) です。
以上の3つの処理を経て、aは完全にクラスAのインスタンスになりました。
サブクラスには親クラスよりも多くのプロパティとメソッドがあることが多く、アップロードするとそれらが破棄されるだけなので安全ですが、ダウンキャストするとプロパティとメソッドが増加する場合がありますが、これは通常安全ではありません。
================================================= =========
af() はクラス B のメソッド f() に対応する必要があります
コンストラクターを呼び出してインスタンスを作成した後、対応するメソッドへの入り口が決定されます。
それ以降、a はクラス A としてアップロードされましたが、オーバーライドされたメソッド f() は依然として B のメソッド f() です。つまり、各オブジェクトはどのメソッドを呼び出す必要があるかを知っています。
A a1 = 新しい B();
A a2 = 新しい C();
a1 と a2 は両方ともクラス A オブジェクトですが、それぞれの f() は異なります。これはまさに、1 階で述べたポリモーフィズムの具体化です。
このような問題については、「Java プログラミングの考え方」で非常にわかりやすく説明されています。
通常、実装はインターフェイスを実装します。 extends は継承されたクラスです。 通常、インターフェイスにはメソッド宣言のみがあり、定義はありません。そのため、Java がインターフェイスの実装を特に指定することは理にかなっています。継承とは、親クラスがメソッドを実装していることを意味しますが、インターフェイスは独自のメソッドを実装せず、宣言のみを実装するためです。メソッド ヘッダーにはメソッド本体がありません。したがって、インターフェイスはメソッドを継承するのではなく、そのメソッド宣言を実装するサブクラスであると理解できます。ただし、一般的なクラス メソッドはメソッド本体を持つことができるため、継承と呼ぶ方が適切です。パッケージをインポートすると、そのパッケージ内のインターフェイスではないすべての実装クラスを使用できます。次に、インターフェイスを実装するかどうかを決定します。インターフェイスを使用する場合、インターフェイスは仕様であり、メソッド本体のないメソッド宣言の集合であるため、実装せずにインターフェイスを呼び出すことはできません。例を挙げましょう。インターフェイスはプロトコルに例えることができます。たとえば、プロトコルが「killing」であるとすると、このインターフェイスを実装するためにマチェーテを使用できます。kill する方法については、マチェーテを使用できます。もちろん、grab を使用して kill インターフェイスを実装することもできますが、killing インターフェイスは単なる関数の説明とプロトコルであるため、killing インターフェイスを使用することはその実装クラスに依存します。 。したがって、パッケージにインターフェイスがある場合は、それを実装する必要はありません。これは他のクラスの使用には影響しません。
実装する
implements は、インターフェイスを実装するためにクラスで使用されるキーワードです。インターフェイスで定義された抽象メソッドを実装するために使用されます。たとえば、people はインターフェイスであり、say メソッドがあります。 publicinterfacepeople(){publicsay();} ただし、インターフェイスにはメソッド本体がありません。メソッド本体は、特定のクラスを通じてのみ実装できます。たとえば、中国語クラスは people インターフェイスを実装します。 public class chinese 実装 people{ public Say() {System.out.println("Hello!");}}
Java では、「実装」とは、サブクラスが親クラスを継承することを意味します。たとえば、クラス A はクラス B を継承し、クラス A は B{} を実装するように記述されます。
エクステンドとの違い
拡張する場合は、親クラスを実装することも、親クラスを呼び出して this.parent() を初期化することもできます。そして、親クラスによって定義された変数または関数を上書きします。この利点は、アーキテクトがインターフェイスを定義し、エンジニアがそれを実装できることです。プロジェクト全体の開発効率と開発コストが大幅に削減されます。
を実装し、親クラスを実装します。サブクラスは親クラスのメソッドまたは変数をオーバーライドできません。サブクラスで親クラスと同じ変数や関数が定義されている場合でも、親クラスに置き換えられます。
これら 2 つの実装の具体的な使用方法は、プロジェクトの実際の状況に依存するため、実装は変更できません。定義されたインターフェイスのみを実装する必要があります。または、拡張性を高めるために変更することもできます。
<!--[endif]-->