この記事では、Javaオブジェクト指向プログラミングの継承について説明します。次のように、参照のために共有してください。
継承:特別なクラスには、一般クラスのすべてのプロパティと行動があります。
相続給付:
1.コードの再利用性の改善
2。クラスに以前にクラスと関係を持たせ、この関係でのみ、多型の特性があります。継承は、クラスとその前のクラスの関係です。
注:
1.Javaは、単一の継承のみをサポートし、複数の継承ではありません。複数の継承にはセキュリティリスクがあるため、複数の親クラスが同じ関数を定義しているが、関数が異なる場合、サブクラスはどの実行を実行するかを知りません。
2.子クラスが親クラスを継承すると、親クラスのすべての方法と特性を継承し、直接使用できます。
3.Javaは多層継承をサポートしています。つまり、孫と息子の父との関係
文法:
[クラス修飾子]クラスサブクラス名は親クラス名{ステートメント;}を拡張します例えば:
クラスpserson {int age;文字列名; public void speak(){system.out.println( "hello world!"); }} //親クラスを継承し、親クラスの学生のすべてのメソッドと属性を継承します{public void study(){system.out.println( "Good Study!"); }} //親クラスを継承し、親クラスワーカーのすべての方法と属性を継承します{public void work(){system.out.println( "good work!"); }}継承システムで関数を使用する方法(APIドキュメントを参照):
親クラスの機能を確認し、サブクラスオブジェクトを作成して機能を使用します
これらの3つのシナリオは、多くの場合、継承プロセス中に発生します。
1)同じ名前の変数
1.サブクラスに同じ名前の非プリブメンバー変数がある場合、サブクラスはこのクラスの変数にアクセスし、これを使用します。サブクラスは、親クラスの同じ名前の変数にアクセスし、Superを使用します。
2。これは、このクラスのオブジェクトへの参照を表します
3.Superは、親クラスオブジェクトへの参照を表します(使用法はこれと同じです)
2)同じ名前の関数
1.サブクラスが親クラスとまったく同じ関数(関数名とパラメーターが同じである)の場合、サブクラスオブジェクトが関数を呼び出す場合、サブクラス関数のコンテンツが実行されます。 、親クラスの関数は上書きされます(書き換えとも呼ばれます)。
2。定義の書き換え:サブクラスが親クラスを継承し、親クラスの関数に従い、サブクラスに入ります。ただし、サブクラスにはこの関数がありますが、関数の内容は親クラスと矛盾しています。現時点では、新しい関数を定義する必要はありませんが、オーバーライド機能を使用し、親クラスの関数定義を保持し、関数コンテンツを書き直します。
3。書き換えに関するメモ(上書き):
<1>サブクラスは親クラスをオーバーライドします。子クラスの許可が、継承前に親クラスの許可以上であることを確認する必要があります。そうしないと、コンピレーションが失敗します。 (public> rhetoricalキーワードを書かない>プライベート)
<2> staticは静的のみをカバーできます
<3>オーバーロード:同じ名前と書き換えの関数のパラメーターリストのみを見てください:子の親クラス方法はまったく同じでなければなりません(関数名とパラメーターリスト)
class fu {// public void show()親クラスがshow()である場合、サブクラス関数とまったく同じになります。親クラスのshow関数は、public void show(string name)//親クラスのショー関数がサブクラスとは異なる(パラメーターリストは異なる)ため、親クラスのショー関数は書き直されません{system.out.println(name); }} class zi拡張fu {public void show(){system.out.println( "zi"); }} class jicheng {public static void main(string [] args){zi z1 = new zi(); z1.show( "nihao"); //親クラスのショー関数は呼ばれます}}}3)コンストラクター
1.サブクラスオブジェクトを初期化するとき、サブクラスのコンストラクターの最初の行にはデフォルトで暗黙のステートメントがあるため、親クラスのコンストラクターも実行されます。
2。super()は、親クラスの中空パラメーターのコンストラクターにアクセスし、サブクラス内のすべてのコンストラクターの最初の行はデフォルトでsuper()になります
3.サブクラスが親クラスコンストラクターにアクセスしなければならない理由
<1>親クラスのデータサブクラスは直接取得できるため、サブクラスは最初に親クラスがデータを初期化する方法を確認することです。したがって、サブクラスが初期化されると、最初にデフォルトで親クラスのコンストラクターにアクセスします。
<2>親クラスが空のパラメーターを持たない親クラスまたはコンストラクターによって処方されたコンストラクターにアクセスする場合は、スーパーステートメントを手動で定義することで策定できます。
<3>もちろん、サブクラスのコンストラクターの最初の行を手動で指定して、このクラスのコンストラクターにアクセスすることもできますが、サブクラスのコンストラクターの少なくとも1つが親クラスのコンストラクターにアクセスします。
class fu {string name; int age; fu(){system.out.println( "hello fu");} fu(string name){system.out.println(name); } fu(string name、int age){this.name = name; this.age = age; System.out.println( "name:"+name+"、age:"+age); }} class ziはfu {//zi(){system.out.println("hello zi ");}をデフォルトで拡張します。 Super( "Zhangsan"、20); //スーパーステートメントを手動で使用して、親クラスのコンストラクターを指定して、親クラスSystem.out.println(name+"::"+age)の非プライベート情報を取得します。 }} class test {public static void main(string [] args){zi z1 = new zi(); }}コンストラクターの例の例:
プログラムの結果を書きます
クラススーパー{int i = 0; public super(string s){i = 1; }} classデモはsuper {public demo(string s){i = 2; } public static void main(string [] args){demo d = new demo( "yes"); System.out.println(di); }} //空のパラメーターを持つコンストラクターが親クラスで欠落していたため、コンピレーションが失敗しました。 //またはサブクラスは、スーパーステートメントを通じて呼び出される親クラスのコンストラクターを指定する必要があります。書き換えと過負荷の例:
class demo {int show(int a、int b){return 0;}}次の機能は、デモのサブクラスに存在する可能性があります。
A.public int show(int a、int b){return 0;} //はい、上書きします。
b.private int show(int a、int b){return 0;} //いいえ、権限では十分ではありません。
c.private int show(int a、long b){return 0;} //はい、それは親クラスと同じ関数ではありません。過負荷に相当するカバレッジはありません。
D.Public Short Show(int a、int b){return 0;} //いいえ。
E.Static Int Show(int a、int b){return 0;} // no、staticは静的のみ上書きできます。 <br> <br>したがって、サブクラスは書き換えと過負荷を許可します。
Java関連のコンテンツを増やすために、このサイトに興味のある読者は、「Javaオブジェクト指向プログラミングに関する紹介と高度なチュートリアル」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、Java Operation domノードスキルの要約」、「Javaファイルの概要、およびJava操作スキルの概要」の概要を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。