[TIL]多形性:使いやすい


※本書は、以下の書籍を学習して整理したものです.
📚 Javaオブジェクト向けSpringの入門原理を理解する

オーバーロード


オーバーライド(再定義)


親クラスのメソッドなどのメソッド名、パラメータのリスト(など)

かふか


オーバーロード-繰り返し定義:同じメソッド名、異なるパラメータリスト

例を見てみましょう。


Animal.java
public class Animal {
	public String name;
    
 	public void showName() {
		System.out.println("안녕 나는" + name +"야");
       	}
}
Penguin.java
1 public class Penguin extends Animal{
2	public String habitat;
3	
4    	public void showHabitat() {
5    		System.out.println(name + "는" + habitat + "에 살아");
6   	}
7	//오버라이딩 - 재정의: 상위클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트
8    	public void showName() {
9        	System.out.println("어머 내 이름은 알아서 뭐하게요?);
10      }
11        
12        //오버로딩 - 중복정의 : 같은 메서드 이름, 다른 인자 리스트
13    	public void showName(String yourName) {
14      	System.out.println(yourName + "안녕, 나는" + name + "라고해");
15      }
16 }
Driver.java
1 public class Driver { 
2	public static void main(String[] args) {
3    		Penguin pororo = new Penguin();
4            
5            	pororo.name = "뽀로로";
6               pororo.habitat = "남극";
7                
8               pororo.showName();
9               pororo.showName("초보람보");
10              pororo.showHabitat();
11               
12              Animal pingu = new Penguin();
13              
14              pingu.name = "핑구";
15              pingu.showName();
16        }
17 }
実行結果
어머 내이름은 알아서 뭐하게요?
초보람보 안녕, 나는 뽀로로라고 해
뽀로로는 남극에 살아
어머 내 이름은 알아서 뭐하게요?
Driver.Java 3行目Penguin pororo = new Penguin();を実行後、Tメモリを使用

  • Penguinクラスは親AnimalクラスのshowName()メソッドを上書きし、showName(yourName:String)メソッド(繰り返し定義)を上書きします.

  • 8行目のpororo.showName();セクションを実行すると、Animalオブジェクト上のshowName()メソッドがPenguinオブジェクト上のshowName()メソッドによって隠されているため、再定義されたshowName()メソッドが呼び出されます.

  • 9行pororo.showName("초보람보");のセクションを実行し、showNameメソッドを呼び出します.

  • 15行目では、showName()はAnimalのshowName()を実行するようですが、Penguinオブジェクトによって再定義されたshowName()メソッドが実行されます.
  • 📌親クラスタイプのオブジェクトが変数を参照する場合でも、子クラスはオーバーライド(再定義)メソッドを呼び出します.