オブジェクト向け四大特性(3):多形性
12260 ワード
マルチファンクション:使いやすい
1.過負荷と過負荷
オブジェクト向けの多形性はオーバーライドとオーバーロードといえる.
上書き
재정의
である.중복정의
である.Animal.java
package polymorphism01;
public Class Animal {
public String name;
public void showName(){
System.out.printf("안녕 나는 %s야. 반가워\n", name);
}
}
Penguin.javapackage polymorphism01;
public Class Penguin extends Animal {
public String habitat;
public void showHabitat(){
System.out.printf("%s는 %s에 살아\n", name, habitat);
}
// 오버라이딩 - 재정의 : 상위 클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트
public void showName() {
System.out.println("어머 내 이름은 알아서 뭐하게요?");
}
// 오버로딩 - 중복정의 : 같은 메서드 이름, 다른 인자 리스트
public void showName(String yourName) {
System.out.println("%s 안녕, 나는 %s라고 해\n", yourname, name);
}
}
Driver.javapackage polymorphism01;
public Class Driver {
public static void main(String[] args) {
Penguin pororo = new Penguin();
pororo.name = "뽀로로";
pororo.habitat = "남극";
pororo.showName(); // 어머 내 이름은 알아서 뭐하게요?
pororo.showName("초보람보"); // 초보람보 안녕, 나는 뽀로로라고 해
pororo.showHabitat(); // 뽀로로는 남극에 살아
Animal pingu = new Penguin();
pingu.name = "핑구";
pingu.showName(); // 어머 내 이름은 알아서 뭐하게요?
}
}
2.多形性とTメモリ
上にあるDriverJavaクラスを表示します.Driver.Javaでは、Penguin pororo=new Penguin()実行後のTメモリスナップショットは以下の通りです.
ここで注目すべきは、Penguinクラスが親AnimalクラスのshowName()メソッドとshowName(yourName:String)メソッド(繰り返し定義)を上書きしていることです.
Animal pingu = new Penguin(); 実行後のTメモリスナップショットは以下の通りです.
pinguオブジェクト参照変数のタイプはAnimalタイプです.それでも、図では、AnimalオブジェクトのshowName()がPenguinオブジェクトのshowName()によって隠されています.だからpingshowName()メソッドAnimalオブジェクトではなくPenguinオブジェクトによって定義されたshowName()メソッドで再定義されたshowName()メソッドを実行します.
親クラスタイプのオブジェクト参照変数を使用しても、サブクラスのオーバーライド(再定義)メソッドが呼び出されることを覚えておいてください.
3.多形性をサポートしない言語
overloadingを使用すると、関数名とパラメータリストを1つ使うだけで便利です.特にjava 5に追加された
제네릭
を用いて,1つの関数だけで複数の関数を実現できる.多形性を使い勝手と定義したのは,そのためである.overridingの場合、
형변환이나 instanceOf 연산자를 써서 하위 클래스가 무엇인지 신경 쓰지 않아도 된다
は、サブクラス再定義メソッドによって呼び出されてもよい.親クラスタイプのオブジェクト参照変数でサブクラスオーバーライドを自動的に呼び出す方法により、コードの簡潔性を維持できます.Class Driver {
public static void main(String[] args) {
동물[] 동물들 = new 동물[5];
동물들[0] = new 쥐();
동물들[1] = new 고양이();
동물들[2] = new 강아지();
동물들[3] = new 송아지();
for(int i = 0; i < 동물들.length; i++) {
동물들[i].울어보세요();
}
}
}
上記のソースコードを考えてみましょう.「泣きましょう()」という方法を定義し、低級動物のネズミ、猫、子犬、子牛の類では、誰もが泣いたことがあると仮定した()方法.実行の結果、どの動物もその子のタイプに応じて泣きます.実行結果は次のようになります.나는 쥐! 찍! 찍!
나는 고양이! 야옹! 야옹!
나는 강아지! 멍! 멍!
나는 송아지! 음메! 음메!
オーバーライド再定義メソッドにより、オーバーライド再定義メソッドにより、メソッドの繰り返し定義により多形性が提供され、多形性は開発者がプログラムを作成する際に使いやすさが提供されます.リファレンス
Reference
この問題について(オブジェクト向け四大特性(3):多形性), 我々は、より多くの情報をここで見つけました https://velog.io/@jsj3282/객체지향의-4대-특성3-다형성テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol