※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.
📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
상위클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트
오버로딩 - 중복정의 : 같은 메서드 이름, 다른 인자 리스트
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() 메서드가 실행된다.
📌상위 클래스 타입의 객체 참조 변수를 사용하더라도 하위 클래스에서 오버라이딩(재정의)한 메서드가 호출된다.