본문 바로가기
Java

다형성(업캐스팅, 다운캐스팅)

by 코딩로그 2022. 7. 30.

 

자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현할 수 있습니다.

 

예제를 통해 업캐스팅과 다운캐스팅에 대해 설명드리겠습니다.

부모 클래스

 

 

자식 클래스

 

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