HeadFirst Java研究(7.継承、多形性)
2361 ワード
👀この文章は私が学んだことを忘れないように整理したものです.
👿継承多形性の定理
👿継承多形性の定理
継承を理解してから、多形性を理解します.
まず継承を使用する理由は?
これはコードの重複を防ぐためです。
継承例としてよく使用されるAnimal階層を表示します.
まず、インスタンス変数をすべてのAnimal形式に適用できると仮定する.
ライオン類があり、ライオンの固有画像、食べ物、飢餓、境界、位置値があります.
ハマクラスのインスタンス変数の値も異なります.
いずれにしても,変数自体は他のAnimal形式と同じものを持つ.
犬やトラなどの動物も同じです.しかし、行動もそうですか?
ライオンと犬は同じ音を出しますか?猫はカバと同じように食べますか?
上書きを使用します。
子クラスで親クラスを使用する方法は、各オブジェクトのプロパティに基づいてカスタマイズされます.
ブレークスルー定義:サブクラスでメソッドのロールを変更または拡張する必要がある場合、継承メソッドを再定義します。
上書き規則
子クラスのメソッドは、親クラスのメソッドと同じでなければなりません.
つまり、パラメータと戻りフォーマットは同じでなければなりません.
コンパイラは、特定のメソッドがReferenceを正しく呼び出すことができるかどうかを決定すると、Referenceのフォーマットをチェックします.
AnimalがDogにコメントしたとき、Animal a = new Dog();
コンパイラは、AnimalクラスでAnimal Referenceを呼び出す方法にのみ関心を持っています.
ただし、実行時にJVMは、参照形式ではなくお尻の実際のDogオブジェクトを使用します.
したがって、コンパイラがメソッドの呼び出しを許可した場合にのみ、メソッドのパラメータと戻りフォーマットが同時に上書きされます.
この方法は正常に動作している.
🅰一連のクラスに親を作成する場合は、その親タイプに含まれる任意の場所で、クラスと任意のサブクラスに属するオブジェクトを任意に使用できます.
これが多形性を使う理由です。
以下の例で説明します.
多形性を使用して、参照タイプを実際のオブジェクトタイプの親タイプとして指定します。
「AはB」の式は、関係のすべてのサブオブジェクト(Dog、Hippo、Cat.)を継承します.親オブジェクト(Animal)に代入できます.これで並べ替えのようなことができます.Animal[] a = new Animal[5];
a[0] = new Dog();
a[1] = new Cat();
a[2] = new Lion();
a[3] = new Hippo();
for(int i =0;i<a.length;i++){
a[i].eat(); //각 클래스에 들어있는 eat메소드가 실행.
}
また,因子と戻りタイプに多形性を適用することができる.class Vet(){//주사를 맞으면 소리가 남.
public void giveShot(Animal a){ //✨
a.makeNois();
}
}
class petOwner(){
public void start(){
Vet v = new Vet();
Dog d = new Dog();
Hippo h = new Hippo();
v.giveShot(d); //Dog의 노이즈가 실행
v.giveShot(h); //Hippo의 노이즈가 실행
}
}
考慮すると、パラメータはタグ部分でAnimalは使用できません.
多形性が使用できない場合、VetクラスではgiveShotメソッドではなく、サブクラス数のメソッドが必要です.どうしたんですか.petOwnerはgiveShotを呼び出すときにどのオブジェクトを送信するか分からないからです.
🅰マルチファクタを使用するコードを作成し、メソッドパラメータを親クラスタイプとして宣言すると、実行時に任意のサブクラスのオブジェクトを渡すことができます。
🅰多形性により,新しいサブクラスタイプをプログラムに追加してもコードを変更する必要はない.上記のVet Class giveShotメソッドで宣言したパラメータは、新しいサブクラスの事前知識がなくても、新しいサブクラスフォーマットのオブジェクトを受信できます。
出典:headfirst(著者:ケイシー・エラ、バート・ベッツ)
Reference
この問題について(HeadFirst Java研究(7.継承、多形性)), 我々は、より多くの情報をここで見つけました
https://velog.io/@chaean_7714/HeadFirst-Java-7상속-다형성-정리
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Animal a = new Dog();
Animal[] a = new Animal[5];
a[0] = new Dog();
a[1] = new Cat();
a[2] = new Lion();
a[3] = new Hippo();
for(int i =0;i<a.length;i++){
a[i].eat(); //각 클래스에 들어있는 eat메소드가 실행.
}
class Vet(){//주사를 맞으면 소리가 남.
public void giveShot(Animal a){ //✨
a.makeNois();
}
}
class petOwner(){
public void start(){
Vet v = new Vet();
Dog d = new Dog();
Hippo h = new Hippo();
v.giveShot(d); //Dog의 노이즈가 실행
v.giveShot(h); //Hippo의 노이즈가 실행
}
}
Reference
この問題について(HeadFirst Java研究(7.継承、多形性)), 我々は、より多くの情報をここで見つけました https://velog.io/@chaean_7714/HeadFirst-Java-7상속-다형성-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol