자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현할 수 있습니다.
예제를 통해 업캐스팅과 다운캐스팅에 대해 설명드리겠습니다.
1. 업캐스팅(형변환 생략 가능)
Tv t1 = new CaptionTv(); -> Tv t1 = (Tv)new CaptionTv();
위의 코드는 조상타입의 참조변수로 자식인스턴스를 참조하고 있습니다. 그러나 TV타입의 참조변수로는 CaptionTv 인스턴스 중에서 Tv 클래스의 멤버들만 사용할 수 있습니다.
t1.caption();
이와 같이 t1으로 자식클래스의 메서드인 caption()을 호출 시 "The method caption() is undefined for the type Tv"라는 에러가 발생합니다.
2.
CaptionTv c1 = new Tv();
다음과 같은 코드 작성 시 컴파일 에러가 발생합니다. 그 이유는 실제 인스턴스인 Tv의 멤버 개수보다 참조변수 c1이 사용할 수 있는 멤버 개수가 더 많기 때문입니다. 조금 더 구체적으로 설명드리면 TV인스턴스에는 Caption 클래스의 text 변수와 caption() 메서드가 존재하지 않기 때문입니다. 따라서, "Type mismatch: cannot convert from Tv to CaptionTv"라는 에러가 발생합니다.
3. 다운캐스팅(형변환 생략 불가)
Tv t1 = new CaptionTv();
CaptionTv c1 = (CaptionTv) t1;
위와 같이 형변환을 꼭 명시해줘야합니다. 부모클래스의 참조변수를 자식클래스의 참조변수에 저장할 경우 형변환을 생략할 수 없습니다!!
참고 문헌 : 자바의 정석
'Java' 카테고리의 다른 글
자바 배열 복사 (0) | 2022.08.10 |
---|---|
Comparable 인터페이스, Comparator 인터페이스 (0) | 2022.08.05 |
자바 StringTokenizer (0) | 2022.08.04 |
[JAVA]문자열 결합 (0) | 2022.08.02 |
JAVA Stream (0) | 2022.07.31 |