Polymorphism

다형성은 하나의 부모 참조가 실제 객체 타입으로 갈라지는 구조다

Animal 타입 변수라도 런타임에 들어 있는 객체가 Dog면 Dog.sound(), Cat이면 Cat.sound()가 실행된다.

01 Animal ref공통 부모 타입으로 받음
02 runtime object실제 객체 타입 확인
03 Dog instanceDog.sound() 선택
04 Cat instanceCat.sound() 선택
구분의미판단
공통 부모 타입Dog와 Cat을 같은 Animal로 다룸참조 타입과 실제 타입을 분리
메소드 재정의각 자식이 sound를 자기 방식으로 구현이름은 같지만 구현은 다름
동적 바인딩실행 시점 실제 객체 기준컴파일 시점 타입만 보고 판단하지 않음

핵심 한 참조가 동시에 둘을 가리키는 것이 아니라, 실행 때 들어 있는 실제 객체에 따라 분기된다.