Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

재훈재훈

다형성과 동적 바인딩 본문

Computer Engineering/JAVA

다형성과 동적 바인딩

jaehoonx2 2018. 4. 7. 17:30

다형성 (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() 메소드를 호출한다.