하나의 객체가 여러가지 타입 가질 수 있음
말 그대로 '올라타다 <---> 짐을 쌓다'를 생각 생각하자.
위의 그림을 위에서 내려다 본다면 좌측은 맨 위의 상자만 우측은 모든 상자가 보일 것이다.
오버라이딩은 하나, 오버로딩은 여러개가 포인트이다.
오버라이딩은 같은 Method 이름, 같은 Parameter 목록으로 상위 클래스의 메서드를 재정의 하는 것이고,
오버로딩은 같은 Method 이름, 다른 Parameter 목록으로 다수의 메서드를 중복 정의하는 것이다.
package 다형성01;
public class 동물 {
public String name;
public void tellName(){
System.out.println("이름은 %s 입니다.\n",name);
}
}
----------------------------------------------------------
package 다형성01;
public class 판다 extends 동물 {
public String home;
public void tellHome() {
System.out.println("주소는 %s 입니다.\n",home);
}
// 오버라이딩
public void tellName() {
System.out.println("이름은 %s야.\n",name);
}
// 오버로딩
public void tellName(String surname) {
System.out.println("성은 %s, 이름은 %s야.\n",surname,name);
}
}
만약 다음과 같이 객체 참조 변수를 생성하고
판다 푸바오 = new 판다( );
동물 아이바오 = new 판다( );
푸바오.tellName();
아이바오.tellName(); 을 호출하면
위에는 당연히 "이름은 푸바오야." 라고 출력할 것이고
아래또한 "이름은 아이바오야."라고 출력한다. ("이름은 아이바오입니다."가 아님)
상위 클래스 타입의 객체 참조 변수를 사용하더라도 하위 클래스에서 오버라이딩한 메서드가 호출됨
위의 상자 그림을 생각하면 위에서 봤을 때 보이는 것은 판다의 메서드
🔹 오버라이딩 - 재정의 : 상위 클래스의 메서드와 같은 메서드 이름, 같은 파라미터 목록
🔹 오버로딩 - 중복정의 : 같은 메서드 이름, 다른 파라미터 목록
김종민, '스프링 입문을 위한 자바 객체 지향의 원리와 이해', 위키북스 참고