재훈재훈
다형성과 동적 바인딩 본문
다형성 (Polymorphism) Poly- : 여러 개 morp : 형상, 모형
수퍼클래스 타입의 참조변수가 서브클래스 타입의 객체를 참조할 수 있다.
Animal ani = new Human("Male", "Korean", "180");
// Animal형 변수 ani가 Human형 객체 참조
// 역은 성립하지 않음!
가정 : 수퍼클래스인 Animal 클래스에는 객체의 정보를 출력하는 toString() 이라는 함수가 있다.
서브클래스인 Human 클래스에도 수퍼클래스의 toString()을 overriding한 toString() 함수가 있다.
메서드 이름이 동일함.
그러면 아래 코드의 결과는 무엇일까?
System.out.println( ani.toString() );
// ani는 Animal 타입의 변수이지만, 실제는 Human 타입 객체를 참조한다.
// 두 클래스는 모두 toString()을 갖고 있다.
// 수퍼와 서브 중 어느 클래스의 toString()을 호출할까?
정적 바인딩 (Static Binding) 과 동적 바인딩 (Dynamic Binding)
정적바인딩 - 변수의 타입이 수퍼클래스이니 수퍼클래스의 메소드를 호출한다.
(컴파일러가 결정내리는)
동적 바인딩 - 실제 참조하는 객체는 서브클래스이니 서브클래스의 메소드를 호출한다.
(런타임 시 결정내리는)
자바는 동적 바인딩을 적용한다. 즉 위의 코드는 Human 클래스의 toString() 메소드를 호출한다.
'Computer Engineering > JAVA' 카테고리의 다른 글
파라미터의 다형성 (0) | 2018.04.07 |
---|---|
추상클래스와 인터페이스 (0) | 2018.04.07 |
상속과 생성자 (0) | 2018.04.07 |
참조변수(클래스 및 배열)의 선언 및 생성 시 주의할 점 (0) | 2018.04.07 |
문자열 다루기 예제 3 - index maker 수정본 (0) | 2018.04.07 |