継承の概要
受け入れるようになっ等の以前のスタイル、文化的、知的、財産を指し、
Javaの継承
クラスとクラスメイク間の親子関係を作ります
継承されたクラスは親クラスと呼ばれている(基底クラス、スーパークラス)
継承されたクラスは、サブクラス(派生クラス)と呼ばれています
フォーマット(拡張)
{親クラス
// .....
}
サブクラスは{親クラスを拡張します
// .....
}
どのような影響サブクラスは親クラスを継承した後、
サブクラスは、親クラスの非専有部材(メンバ変数、メソッドのメンバー)を使用することができます
例:
//親クラスに親定義 パブリッククラス親{ //メンバ変数 ;プライベート文字列名 ;プライベートint型の年齢を //パブリックアクセス方法 ALTを+のgetXXX()、のsetXXX()とコンストラクタを作成すばやく挿入://ショートカットを 公共のボイドのsetNameを(文字列名){ this.name =名; } パブリック文字列のgetName(){ 名前を返す; } 公共ボイドsetAge(年齢INT){ this.age =年齢; } 公共のint getAge(){ 年齢を返す; } //構成メソッド 引数なし//コンストラクタ パブリック親(){ } //すべてのパラメータ構成 、パブリック親(文字列名、int型の年齢 ){ ; this.name =名 this.age =年齢。 } }
//サブクラスを定義する親の親クラス子を継承 親子を拡張するパブリッククラス{ }
//テストクラス パブリッククラスのテスト{ //主な機能は、プログラムのメインエントリであり、すべてのコードは、ここから のpublic static無効メイン(文字列[] args)を{ //。1.サブクラスオブジェクトの作成 新しい=子子を子(); メンバ変数代入の2 //オブジェクト。 child.setName( "ジョー・スミス"); child.setAge(12); //プリント3オブジェクトのメンバ変数。 のSystem.out.println( "名:" + child.getName()+ "年齢:" + child.getAge()); / * サブクラスプライベートメンバ(メンバ変数、メソッドのメンバー)非親クラスを使用することができます * / } }
結果:
2.相続シーンの使用
•複数のクラスが同じ属性や行動を存在する場合、これらの内容は新しいクラスに抽出することができますので、これらのクラスと新しいクラスは、親子関係を作る、コードの再利用を実現
例:動物の継承と使用の定義
要件:名前、年齢、性別、一般的な行動::食べる()、2幕特に:クラス犬、豚のクラスを定義し、それらの属性を共有、()を見に(いびき)
//親クラス動物動物クラス定義 パブリッククラス動物を{ //メンバ変数 //名前 プライベート文字列名; //年齢 プライベートint型の年齢; //セックス プライベートセックスのString; //メンバメソッド 行って食べ// (公共ボイドは食べます){ System.out.printlnは(this.name +) "....食べている"; } //共通のアクセス方法 公共ボイドのsetName(文字列名){ this.name =名; } 公共ボイドsetAge(年齢INT){ 年齢= this.age; } 公共ボイドsetSex(文字列セックス){ this.sexセックス=; } パブリック文字列のgetName(){ 名前を返します。 } int型getAgeパブリック(){ 年齢を返す; } パブリック文字列getSex(){ セックスを返す; } //コンストラクタ //コンストラクタ引数のない パブリック動物(){ } //設定されたすべてのパラメータ のパブリック動物(文字列名、int型の年齢 、文字列性別){ this.name =名; this.age =年齢; this.sex性別=; } }
//サブクラスを定義するには、親クラス犬動物継承 パブリッククラス犬を拡張動物{ //メンバメソッド 公共ボイド時計(){ System.out.printlnは(this.getName()+「ハウスキーピングが」); } }
//サブクラスを定義するには、親クラスブタ動物継承
パブリッククラスを拡張ブタ動物{ //メンバメソッド 公共ボイドSNORE(){ System.out.printlnは(this.getName()+「いびきされます」); } }
//テストクラス パブリッククラスのテスト{ 公共の静的な無効メイン(文字列[] args){ .. 1 //オブジェクトクラス犬作成 犬犬の犬を新しい新=(); 。割当てを受ける// 2犬オブジェクト部材 dog.setName ( "ハスキー"); // 3部材バリアブル印刷犬オブジェクト のSystem.out.println( "名:" + dog.getName()); 4 //犬オブジェクトのメソッドが呼び出す )(dog.eat、 犬.watch(); のSystem.out.println( "============"); ... // 1は、豚のオブジェクト・クラスの作成 (=新しい新しい豚豚豚); // 2。豚のオブジェクトのメンバ変数代入 pig.setName( "モルモット"); // 3印刷豚のオブジェクトのメンバ変数 のSystem.out.println( "名:" + pig.getName()); //ブタメンバメソッドオブジェクト・コール )(pig.eatします。 pig.snore(); } }
結果:
3.継承長所と短所
利点:
1.多重化機能
直接既存のプロパティや行動に多くの作業を保存し、多重化機能を実現継承
2.簡単に新しい機能を開発します
構築が容易に既存の機能に基づいて、新しい機能を拡張
3.明確な構造、理解を容易
クラスは、システムに関連付けられた属性を継承し、彼らは明らかにコードの構造の人々の理解を簡単にするために、構造的なレベルを指示します
4.簡単に維持するために、
異なるクラス間の継承関係、これらは大幅にメンテナンスコストの削減、物事の間の整合性をある程度維持するように、
短所:
1.ブレークのカプセル化
親クラスのオブジェクトのカプセル化を破って、サブクラスの親クラスの実装の詳細を公開
2.高カップリング
タイト一緒のクラス間の結合を、高い相互依存
プログラム設計の追求
低い結合、高い内部ポリ
- カップリング:2つ(またはそれ以上)が互いに相互依存モジュール
- 結束:コンパクトなモジュール内部構造、強い独立性
4.クラスの継承メンバーの使用
親クラスのメンバ変数での継承の1.使用
このスーパーとの違い
この
- 自然:オブジェクト
- 使用方法:このクラスは、探し始まります
スーパー
- 本質:親クラスのメモリ空間を特定します
- 使用法:親クラスから探し始めます
例
要件:あなたが使用している場合、子、親クラスは、同じ名前のメンバ変数を定義しますか?
分析:
:サブクラスのメンバ変数のint型の価格を定義し、デフォルト値は10です
B:親クラスのメンバ変数int型の価格で定義され、デフォルト値は20です
C:メソッドのサブクラスのメンバーはローカル変数int型の価格を定義し、デフォルト値は5です
D:サブクラスのメソッドの3人のメンバーの各出力値の価格
果物の親クラスの//定義 パブリッククラスフルーツ{ //メンバ変数 //料金 INT = 20価格です。 }
//アップルのiPodのクラスのサブクラスで定義する 拡張アップルフルーツ{publicクラスを //メンバ変数 //価格 プライベートint型= 10価格; //メンバメソッド 公共ボイドshowPrice(){ 。int型= 5価格; System.out.printlnは(価格。 ); //ローカル変数5価格。 のSystem.out.println(this.price); //サブクラス部材10可変価格。 のSystem.out.println(super.price); //親部材20が可変価格 } }
//テストクラス パブリッククラスのテスト{ 公共の静的な無効メイン(文字列[] args){ //テスト継承、サブ親との間のメンバ変数 // 1.サブクラスオブジェクトクラスオブジェクトリンゴ作成 アップルリンゴ=アップル(新新); 2は、//オブジェクトのメソッドを呼び出す apple.showPriceを(); / * ルールで使用されるJava変数は、近接の原則に従う ローカルエリアを使用する必要があり、このクラスのないメンバーは、位置を見つけるために行ったん なし、使用するためにそこを親クラスのメンバーの場所に行ってきました見つから ないエラーで、使用にあります * / } }
結果:
中性子親クラスメンバメソッド2.継承
例
要件:親子クラスは、同じ名前のメソッドのメンバーを定義し、どのように使用します
武道クラス武道の定義:
内部強度の練習:internalStrength()
運動移動:ストローク()
人的資源の構成定義されたクラスNineYin:
内部強度の練習:internalStrength()
運動移動:ストローク()
人的資源の構成の練習は、だけでなく、基本的な内部強度に必要な柔らかさを実践するために、親クラスのメソッドを拡張する必要があります
シンプルな動きは、このような大きな動き九阴白骨爪親クラスのメソッドを再実装する必要があり、使用することができますがなければならない、不十分な未使用となっています
親クラス武道の//定義 パブリッククラスマーシャル{ //メンバメソッド //内部強度練習 公共ボイドinternalStrength(){ System.out.printlnは(「練習強度」); } //実際に移動する (パブリックボイドストローク){ System.out.println( "運動の動きを"); } }
//サブクラスNineYin人的資源の構成のクラスを定義するには、継承する親クラスマーシャル武道クラス パブリッククラスNineYin延びマーシャル{ //メンバメソッド //内部強度を発揮 公共ボイドinternalStrengthを(){ //親クラスメンバを呼び出す super.internalStrengthを(); のSystem.out.println( "柔らかさを行使"); } 公共ボイドストローク(){ System.out.printlnは( "運動九阴白骨爪"); } }
//テストクラス パブリッククラスのテスト{ 公共の静的な無効メイン(文字列[] args){ //要求:呼び出しメソッドNineYin NineYin nineYin新しい新しいNineYin =(); nineYin.internalStrength(); nineYin.stroke(); } }
結果:
結論:
1.原則の方法を探します:
近接の原則
シーケンシャル方式を2.検索
このタイプ - >親 - >高い親....オブジェクト
親クラスの道の3アクセス方法
スーパー。親クラスのメソッド名()
4.同じ名前定義された前提の方法
ワン親関数は、実際に親クラスの機能を拡張し、実装要件を満たすことができません
親クラスの機能は、親クラスのメソッド時代遅れ再実装されています
親クラスの中性子3継承のコンストラクタを使用します
要件:あなたがオブジェクトを作成すると、どのようにコンストラクタが呼び出されたとき?
分析:
:親クラスPersonの定義、引数なしのデフォルトコンストラクタで出力文
B:引数なしでデフォルトコンストラクタで出力文で労働者、相続人を、サブクラス化
C:サブクラスワーカーオブジェクトを作成し、テストクラスを定義
結論:
・あなたは、サブクラスのオブジェクトを作成すると、優先順位は、親クラスのコンストラクタを呼び出します
・サブクラスのコンストラクタ、暗黙のステートメントのスーパー()、引数なしのコンストラクタを呼び出すためのデフォルトの親クラスの最初の行
要件:引数なしで親クラスのデフォルトコンストラクタが行う方法は存在しないのですか?
分析:サブクラスは、オブジェクトを作成するとき、あなたは親が引数なしのデフォルトコンストラクタに存在しない場合は、手動で他の親構造を呼び出す必要があり、そのオブジェクトの親クラスの内容を初期化する必要があります
親クラスの//定義人物 公共Personクラス{ //コンストラクタ 引数なしのコンストラクタ// パブリック者(文字列名){ 引数なしで//System.out.println("Personクラスのコンストラクタ「); System.out.printlnは( "コンフィギュレーションパラメータ化クラスPerson"); } }
//ワーカーのサブクラス定義する 労働者は、Personクラス{拡張し、パブリックを //コンストラクタ 引数なしのコンストラクタ// ワーカー(){公共を 引数なしで//デフォルトコンストラクタは、親クラスを呼び出すために; //スーパー() //System.out.println (「引数なしでワーカークラスのコンストラクタ」); スーパー(「ジョン・ドウ」) のSystem.out.println(「ワーカーパラメータ化クラス構成」); } }
/ * コンストラクタサブクラスは、(デフォルトのsurperを持つことになります);親クラスにアクセスするために使用される引数なしのコンストラクタ 引数なしなし親クラスのコンストラクタた場合、パラメータはsurperによって親クラスへのアクセス(パラメータ)を設定することができます * / publicクラステスト{ 公共の静的な無効メイン(文字列[] args){ //オブジェクトクラスワーカーのサブクラス作成 ワーカーワーカー新しい新しいワーカー=を(); } }
結果:
書き換え方法(上書き)
・定義:
そして、定義された親クラスのサブクラスの現象が発生したと同様の方法
説明:
この方法はまた、複製、カバーとして知られている、メソッドをオーバーライド
メソッド名、パラメータリスト、戻り値の型は同じである必要があります
*注:
スーパークラスのプライベートメソッドをオーバーライドすることはできません
サブクラスのメソッドへのアクセスは、親クラスのメソッドよりも小さくすることはできません
サブクラスはスーパークラスのメソッドよりも多くの例外をスローすることはできません
使用シナリオ:
親クラスの機能を拡張
親クラスの親機能的に廃止され、再実装する機能
四つ権限剤が小から大まで、範囲を変更しています。
プライベート、デフォルト(書き込みには何もデフォルトではありません)、保護、公衆
1.Javaのアクセス修飾子
このクラスprvate
このパッケージの下で、このデフォルトのクラス、クラス
このクラスの別のサブクラスパッケージで、このタイプのパッケージの下で、保護されました
このパッケージの下でこのクラスのpublicクラス、異なるパッケージでサブクラス、他のクラス
概要
プライベート:重点は、自分の使用することです
デフォルト:重点は、使用の次のクラスを通知することです
保護:重点は、サブクラスが使用します
公共:誰もが使用するために重点があります
2.書き換えおよび方法は差をオーバーロードする工程
オーバーロード
メソッド名:同じ
パラメータのリスト:異なる(または場所のタイプに対応する番号)
戻り値:何もします
位置を定義します。同じクラスを
リライト
メソッド名:同じ
パラメータリスト:同じ
戻り値:同じ
修飾子:アクセスが上書きされている方法よりも少ないではありません
定義された位置:子の親クラス
6.java継承された特性
・単一継承
継承をJavaは、単一のクラス継承をサポートしていますが、マルチレイヤーのサポートは、(再)
Javaインタフェースは多重継承をサポートし、構文は次のとおりです。
Aは、インタフェースインタフェースB、インタフェースC、Dインタフェースを拡張....
・プライベートメンバーは継承できません
唯一の非プライベートメンバーの親クラス(メンバ変数、メンバーメソッド)を継承
・コンストラクタは継承できません
この工法は、クラスオブジェクトを初期化するために使用されます
あなたは、サブクラスのオブジェクトを作成するときは、初期化するために、親クラスのコンストラクタを呼び出す必要があります
親クラスを継承するように設定することができる場合は、親オブジェクトは、コンテンツです
この操作は、混乱の呼び出しが発生します
・関係の継承システムは、の「あります」
サブクラスのコンプライアンスは、そうでない場合はお勧めしません、継承を使用するには、親クラス「です」