다형성
다형성은 무엇일까?
- 사용방법은 동일하지만 다양한 객체를 활용해 여러 실행결과가 나오도록 하는 성질
- 메소드 재정의와 타입 변환을 결합하여 구현
- 오버로딩 → 같은 이름의 메소드
- 오버라이딩 → 부모의 메소드를 상속받아서 구현
- 하나의 역할이 여러가지 기능을 수행하는 방식
- 부모타입의 객체 참조 변수로 자식객체를 참조할 수 있다. (상속관계)
int형은 int형만 가져올 수 있듯이 부모타입은 부모타입만 가져올 수 있음
예제로 이해해보자
- 클래스 B는 A로 부터 상속받고 있다.
- 새로운 객체를 생성했다.
- 클래스B를 obj변수에 인스턴스화 하는데
- 이 변수 obj는 클래스A의 데이터타입의 행세를 하고 있다.
- 파란부분의 내용을 추가했다.
- 변수 obj는 B클래스를 인스턴스 했지만 A클래스 행세를 하고 있기 때문에
- A클래스의 메소드인 X메소드만 호출가능하고 Y메소드는 호출할 수 없다.
- 즉, obj변수를 부모클래스처럼 동작시킬 수 있다.
- 파란색부분의 내용을 추가했다
- 클래스 A의 X메소드와 클래스B의 X메소드는 오버라이딩관계이다.
- 그렇다면 클래스B에 담가있지만 클래스A의 행세를 하고 있는 obj는
A클래스 메소드를 불러올까 B클래스 메소드를 불러올까?
- 결과. B클래스의 X메소드만 호출할 수 있다.
- 즉, obj변수는 B에 담고 있지만 A의 행세를 하고있기 때문에 A에 있는 메소드만 불러올 수 있다. 그러나 상위클래스를 오버라이징한 예외적인 경우는 인스턴스화시킨 B클래스의 메소드를 호출한다.