반응형
아래 글은 공부를 위해 객체지향의 원리 및 이해를 정리한 것 입니다.
📃 참고도서
프로그램 언어의 다형성(多形性, polymorphism; 폴리모피즘)은 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다.
(출처 : 위키피디아)
# 오버라이딩(overriding)과 오버로딩(overloading)
오버라이딩과 오버로딩을 다형성이라고 정의 할 수 없다고 생각한다.
(위 책에서는 다형성에 가장 기본을 오버라이딩, 오버로딩으로 보고 있다.)
다형성을 구현하는 방법 중 대표적으로 알려진 것이다.
- 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의(오버라이딩)
- 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의(오버로딩)
- ride : 올라타다
- load: 적재하다
인공위성에서 내려볼 때 오버라이딩(올라타기)된 경우는 맨 위에 올라탄 존재만 보인다.
오버로딩(적재하기) 된 경우는 옆으로 적재된 모든 적재물이 다 보인다.
Animal.java
package polymorphism01;
public class Animal {
public String name;
public void showName() {
System.out.printf("안녕 나는 %s야. 반가워\n", name);
}
}
Penguin.java
package 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.printf("어머 내 이름은 알아서 뭐하게요?");
}
// 오버로딩 - 중복정의 : 같은 메서드 이름, 다른 인자 리스트
public void showName(String yourName) {
System.out.printf("%s 안녕, 나는 %s라고 해\n", yourName, name);
}
}
Driver.java
package 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();
}
}
실행결과
더보기
어머 내 이름은 알아서 뭐하게요?
초보람보 안녕, 나는 뽀로로라고 해
뽀로로는 남극에 살아
어머 내 이름은 알아서 뭐하게요?
실행 T 메모리
* 상위 클래스 타입의 객체 참조 변수를 사용하더라도 하위 클래스에서 오버라이딩 (재정의)한 메서드가
호출된다는 사실을 꼭 기억하자.
반응형