

다운 캐스팅 - 부모가 자식을 가리킴
업 캐스팅 - 자식이 부모를 가리킴
자식 1, 자식 2 … 자식마다 (성격,성품,능력)이 다 다르기 때문에
부모가 자식의 타입에 맞춰줘야 함
= 강제 형 변환 → 다운 캐스팅 (상위 클래스의 타입을 하위 클래스의 타입으로 바꿈)
반대로, 자식이 부모를 가리킬 때는 타입 상관 없음 왜냐면 부모는 큰 개념 , 자식은 작은 개념이기 때문에 = 자동 형변환 → 업 캐스팅
업 캐스팅이 선행 되어야 다운 캐스팅이 됨
부모는 여러 명의 자식을 가리킬 수 있음
Cat c = (Cat) x;
c.night();
여기서
(Cat) x.night();
위와 같은 형식의 다운 캐스팅은 불가하다.
why?
'.' 참조 연산자가 우선순위가 높기 때문에 (Cat) 캐스팅 보다 먼저 실행된다.
이럴 경우엔
((Cat) x).night();
이렇게 괄호( ) 하나를 더 생성해서 써야 한다.
: 상위 클래스가 동일한 메시지로 하위 클래스를 서로 다르게 동작 시키는 객체지향 이론
[다형성 전제 조건]
: 실행 시점에서 사용될(호출될) 메서드가 결정되는 바인딩
-> 프로그램의 실행 속도와 관계 있음
실행 시점에서 사용될 메서드를 찾아가야 하기 때문에
: 컴파일 시점에서 사용될 메서드가 이미 결정되는 바인딩
-> 프로그램의 실행 속도와 관계 없다.
부모가 자식에게 명령을 내리면 자식은 반드시 무조건 동작 해야 한다는 말과 같다.
1. 다음 중 다형성에 대한 설명으로 가장 옳은 것은?
a) 하나의 메서드/변수가 상황에 따라 다양한 의미를 지닐 수 있는 것
b) 상속관계를 통해 코드를 재사용하는 것
c) 인터페이스를 통해 객체 간의 상호작용을 정의하는 것
d) 여러 개의 객체에 대하여 동시 작업이 이루어지는 것
- 다형성의 전제조건으로 옳지 않은 것은?
a) Inheritance relationship (상속관계)
b) Overriding (메소드 재정의)
c) Upcasting (상향 형변환)
d) Static binding (정적 바인딩)