[TIL] 다형성 : 사용편의성

hyo_·2021년 2월 8일
0

JAVA 

목록 보기
18/20

※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.

📚 스프링 입문을 위한 자바 객체지향의 원리와 이해


오버라이딩 & 오버로딩

오버라이딩(재정의)

상위클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트

오버로딩

오버로딩 - 중복정의 : 같은 메서드 이름, 다른 인자 리스트

예제를 통해 알아보자!

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(yourName)메서드를 호출한다.

  • 15번째 줄에서 showName()은 Animal의 showName()을 실행할 것 같지만 위와 동일하게 Penguin 객체에 의해 재정의된 showName() 메서드가 실행된다.

📌상위 클래스 타입의 객체 참조 변수를 사용하더라도 하위 클래스에서 오버라이딩(재정의)한 메서드가 호출된다.

profile
🎓의지적인 삶을 살자!😊

0개의 댓글