ポリモーフィズム
多状態を達成するためにどのようにJavaの?多型を使用する利点?
参照変数の二つのタイプ:
コンパイル時の型(少しファジー、通常は親)
公共のボイド(ペットPET);
型宣言によって決まります。
ランタイム型(実行、サブクラス、特にサブクラス)
実際の対応するオブジェクトのタイプによって決定されます。
複数の状態が3つの必要な条件を持っているがあります。
私たちは、サブクラスのオブジェクトに親クラスの基準点をオーバーライドする方法を有することは、継承されてきました
なぜ書き換え?
サブクラスのメソッドを呼び出す親オブジェクトを使用して、特定のサブクラスオブジェクトの親クラスの基準点、
メソッド呼び出しを書き換えなければなりません。
なぜ多型(カプセル化と継承)
1.多形は、
プログラムの拡張性と保守性を改善しましたか?
コードの再利用性を向上させる
2.パッケージ
のセキュリティの
増加コード再利用
3.継承は、
コードの再利用性を向上させます
の多形型の2種類の
親クラスのメソッドなどのパラメータ1
パブリック戻り型メソッド名(オブジェクト名親型){ } 公共ボイド飼料(ペットPET){ }
親クラスのメソッドとして2.(また、工場設計パターンと呼ぶ)の値を返します
方法として親クラス値型返し 公共getPet PET(int型の){ //ペット被写体宣言 ペットペット= NULL; スイッチ(タイプ){ ケース1: //参照オブジェクト点サブクラス親クラス ペット=新しい犬( "カイ" 2,60 "ゴールデン"); BREAK; }
次のコード:(特定のアプリケーションや構成はセッターを取得、セットを省略しています)
パブリッククラスのCa tはペット{延び
プライベート文字列の色を、
@Override
公共ボイド{)(食べる
のSystem.out.printlnを( "猫在吃鱼")。
}
@Override
公共ボイド樹皮(){
System.out.printlnは( "苗苗ミャオ")。
}
}
パブリッククラス犬はペット{拡張
プライベート文字列のブランドを、
@Override
公共ボイド{)(食べる
のSystem.out.printlnを( "狗在吃骨头")。
}
@Override
公共ボイド樹皮(){
のSystem.out.printlnは( "ウォンウォンを獲得しました")。
}
}
パブリック抽象クラスのペット{ プライベート文字列名; プライベートint型の年齢; プライベートint型の愛。 プライベートint型健康。 パブリック抽象ボイド)(食べます。 パブリック抽象ボイド樹皮(); }
次のように色多型フィールドの二種類が使用され
Personクラス{パブリック / ** *ペット採用方式 *タイプ親クラス・メソッドのタイプが値を返すよう * @return * / パブリックgetPetペット(){ スキャナスキャナ新しい新しいINPUT =(System.in); のSystem.out.println ( "ペットの養子縁組の要求タイプ1、2匹、3匹の猫、豚を入力してください"); int型= input.nextInt(); ペットPET = NULL; IF(タイプ== 1){ PET =新しい新しい犬を() ; }そうでなければ(タイプ== 2){IF PET =新しい新しい猫(); } {他 PET =新しい新しいブタ(); } PETを返す; } 公共ボイド飼料(ペットPET){ pet.eat(); } }
パブリッククラスTest { パブリック静的な無効メイン(文字列[] args){ 人の暁=新しい人()。 ペットペット= xiaoming.getPet(); System.out.println(ペット); xiaoming.feed(ペット); } }
クラスは、その豚の多型のスケーラビリティを見ることができます
豚はペットクラスを拡張{パブリック @Override 公共ボイドは{)(EAT ;のSystem.out.printlnを( "ブタはキャベツを食べる") } @Override 公共ボイド樹皮(){ System.out.printlnは( "ヘンハム"); } }