より困難な抽象クラスは、彼があまりにも抽象的だったためか、理由を理解するために、ハハ、ナンセンスのようです。。
遠い昔の概念は、この抽象クラスを知っていたが、問題に巻き込まれてきたが:抽象クラスを最後に、あなたが実際の開発プロセスで使用される羊毛を持っていますか??
だから、今日、私は、実際の開発では、完全に明確なこの男の役割に、例をしたいです!!
私はダンジョンゴースト剣士の選手がいた場合は、以下の機能を再生することができます:
1、私のゴースト剣士は一度だけのスキルを入れて
2、私は幽霊剣士スキルの多くを
3、キースキルは、私がすることができます解放するために選択したものをスキルを
4、私はできDaguaiスキル(技能Daguaiリリース音)
まず外観は抽象クラスの実装を必要としません。
STEP 1:スキル!!
私は、今のレベル5を仮定2つのスキルがあります(最大)のピックアンドゴーストカット(キル)している、私は今、この二つのスキルを定義します。
パブリック クラスアップ { 公共 ボイドスピーク() { // サウンドピック Console.WriteLineを(「ねえ!!! 」); } } パブリック クラスキル { 公共 空スピーク() {
//ゴーストは音のカット Console.WriteLineを(" ハ!" ); } }
パートII:定義ゴースト剣士!!
役割の束、異なる役割が路上で異なる特性を持っているので、幽霊兵士を作るために挑戦し、ゴーストカットを満たします。
パブリック クラス剣士 { // 2つのスキルに対応する プライベートまでアップ、 プライベートはキルラキル; //は、解放するためにどのスキルを選択し 、公共 のボイドに選択(オブジェクトのスキル) { IF(スキルはIS アップ) { アップ = (最大)のスキルを、 キル = nullを; } 他 { 死滅 = (キル)技術、 最大 = NULL ; } } // 異なる音のリリースに対応して異なるスキルを解放する 公共 ボイドヒット() { Console.WriteLineを(" スタートDaguai !! " ); IF(キル== nullの) { up.Speak(); } 他 { キル.Speak(); } } }
パートIII:ゴースト剣士の例では、路上でゴースト剣士の完全な、私の名前は私のゴーストゴースト剣士剣士で唯一のIDです。
クラスプログラム { 静的な 無効メイン(文字列[] argsを) { //はゴースト剣士朝日朝日赤ちゃんインスタンス 剣士xuxubaobao = 新しい新しい剣士を(); // 選択し、出放し使用朝日朝日の赤ちゃんの選択 xuxubaobao.Select(新しい新しいアップ()); xuxubaobao.Hit(); // ゴーストを選択朝日朝日の赤ちゃんを切り出し、リリース xuxubaobao.Select(新しい新しいキルを()); xuxubaobao.Hit(); } }
いいえ問題は、すべてがとても美しいではありません!!大物は楽しみを持って、我々プログラマは微笑みました。
しかし!!プレイヤーはローカル専制君主であり、瞬時に10に上昇したので、ボスは新しいスキルの崩壊日間のストライキ(ノック)を追加するプログラマを促しました。
私は老婦人、問題はないが、彼らが従事し始めると思いました。
以下はプロセスの変形例であります:
最初のステップ:
当然のことながら、我々は新しいクラスのスキル崩壊の日のストライキを定義している(ノック)
パブリック クラスノック { 公共 ボイドスピーク() { // 崩壊の日は、音のヒット (Console.WriteLineをする「そうそう!!! 」); } }
パートII:
当然のことながら、我々は剣士のクラスを変更しています
パブリック クラス剣士 { // 2つのスキルに対応する プライベート、アップアップ プライベートキルラキル、 プライベートノックノック; // 解放するためにどのスキルを選択し 、公共 のボイドを選択(オブジェクトのスキルを) { IF(スキルはIS アップ) { アップ = (最大)スキル; キル = NULL ; ノック = NULL ; } そう IF { キル= (キル)技術、 最大 = NULL ; konck = NULL ; } そうでなければ { konck = (konck)技術、 最大 = NULL ; 死滅 = NULL ; } } // 異なるスキルを解放は、異なる音放出に対応する 公共 ボイド(HIT ) { Console.WriteLineを(" Daguaiを開始!! " ); IF(キル== NULL) { up.Speak()。 } そう であれば { kill.Speak()。 } 他 { knock.Speck()。 } } }
OK!
上記からわかるように、新しいスキルを追加する老婦人は、剣士のクラスは、新しいフィールドのノックを追加し、選択してスキルを耐え、それぞれのスキルを解放することができます悪くない、もしそうでなければ、余分な追加!!
しかし、私は、コードが実装された変更されたときに、それらの大物一秒999は、この時、上司は私が100個のゴースト剣士のスキルを追加するために急いでみましょう。
I即座に青からボルト!!
抽象クラス - この時点で、私は密かに私のバナナ王は私に新しいスキルを教え大好きされています!!
だから、私は抽象旅の新しいアイデアを開始しました:
STEP 1:スキル
まず、抽象クラスAbstractSkillを定義します。ピック、ゴーストカット、崩壊日間のストライキ、大きな吸引全ての老婦人はAbstractSkill、存在する音のスキルの方法と呼ばれるクラスに抽象化、しかしリリースは、それが聞こえるとは何ですか?答えはノー音ではありません。
パブリック 抽象 クラスAbstractSkill { パブリック 抽象 ボイドスピーク(); }
抽象クラスを継承するために、各特定のスキル(オーバーライドが継承する方法AbstractSkillに書き直すことがある - それは、各スキルのために再度追加効果音に、です):
パブリック クラスアップ:AbstractSkill { 公共 オーバーライド ボイドスピーク() { // サウンド選ぶ Console.WriteLineをする(「ちょっと!!! 」); } } パブリック クラスキル:AbstractSkill { 国民が オーバーライド ボイドスピーク() { // ゴーストは音をカット Console.WriteLineを(" HA!" ); } } パブリック クラスノック:AbstractSkill { 公共 オーバーライド ボイドスピーク() { // 崩壊の日は、音のヒット Console.WriteLineを(" ええOHを!!! " ); } }
パートII:定義ゴースト剣士。
今回はゴースト剣士(EX ??だけでコードをいないようだ)を再定義しました:
パブリック クラス剣士 { プライベートAbstractSkillスキル。 公共剣士は、(){} 公共 ボイドは(AbstractSkillスキル)を選択し 、{ この .skill = スキル; } 公共 ボイドヒット() { skill.Speak()。 } }
パートIII:ゴースト剣士の例と3つのスキルを置きます。
クラスプログラム { 静的な 無効メイン(文字列[] argsを) { //はゴースト剣士朝日朝日赤ちゃんインスタンス 剣士xuxubaobao = 新しい新しい剣士を();
// 選択し、出放し使用朝日朝日の赤ちゃんの選択 xuxubaobao.Select(新しい新しいアップ()); xuxubaobao.Hit();
// 朝日朝日の赤ちゃんは、ゴーストを切り出しとリリース使用することを選択 xuxubaobao.Select(新しい新しいキルを();) xuxubaobao.Hit();
//朝日朝日赤ちゃんが三振崩壊とリリース日を使用することを選択し
xuxubaobao.Select(新新ノックを());
xuxubaobao.Hit();
}
}
例えば:老婦人は、新しいスキルを追加し、直接新しいクラスのスキルを定義し、抽象クラスAbstractSkillを継承したい場合は、この時間は、より良いコードのために変化してきている(小さな吸引:サック)
パブリック クラスは、サック:AbstractSkill { 公共 オーバーライド ボイドスピーク() { // 小吸音效 Console.WriteLineを(" オハイオ州オハイオ州オハイオ州!!! " ); } }
だから、抽象クラスと抽象クラスの子会社にクラスを追加する必要があり、彼らが何かを変更していない、それは突然の保存多くの努力ああのすべて!!!