지난번에 업 캐스팅과 다운 캐스팅에 대해서 공부해봤다.
쉽게 말하면 업캐스팅은 큰쪽의 맞추는 것이고 다운 캐스팅은 작은 쪽에 맞추는 것이다.
업캐스팅은 문제(오류가 발생)가 되지 않는다. 왜냐하면 비유적으로 물고기가 어떤 어항이든 크기만 하면 모두 잘 들어가기 때문이다.
문제는 물고기보다 작은 어항일 때 즉 Downcasting 에서 오류가 발생할 수 있다.
메모리 구조로 확인해보자
타입 다운캐스팅
만약 상황이 A -> B -> C 로 상속을 받는다고 가정하자 C의 부모는 B이고 B의 부모는 A이다.
가정 1
A a = new B();
에서 앞 A는 참조하는 객체를 가르키는 것을 의미한다.
따라서 a가 가르키는 것은 A class를 가르킨다.
따라서 이 문장은 가능하다.
가정 2
A a = new B();
B b = (B) a;
이렇게 B()생성자를 통해서 만들면 자동적으로 부모 생성자도 호출하기 때문에 아래 그림과 같은 메모리 구조로 생성된다.
따라서 , 이 문장도 B 객체를 가르키는데 A에서 B로 형변환은 가능하다.
가정 3.
A a = new B();
C c = (C) a;
여기서 애초에 객체가 만들어졌을 때 B로 만들어 졌으며 C는 존재하지 않는다.
따라서 다운 캐스팅을 할 수 없다.
'Development > Java' 카테고리의 다른 글
[Java, 개념] 추상 클래스와 인터페이스 (0) | 2022.07.24 |
---|---|
[Java, 개념] 부모 생성자가 먼저 생성되는 이유 (0) | 2022.07.22 |
[Java, 개념] this() 메서드 (0) | 2022.07.21 |
[Java, 개념] 가변 길이 배열 입력 매개변수 (0) | 2022.07.21 |
[Java, 개념] 자료형, 반복문, String class 자잘한 정보 (0) | 2022.07.21 |