반응형
기본형 변수처럼 참조변수도 형변환이 가능하다.
단, 서로 상속관계에 있는 클래스 사이에서만 가능!
자손타입의 참조변수를 조상타입의 참조변수로, 조상타입의 참조변수를 자손타입의 참조변수로의 형변환만 가능하다.
class Phone { }
class IPhone extends Phone { }
class AndroidPhone extends Phone { }
예를 들어 Phone클래스가 있고 이를 상속받는 IPhone과 AndroidPhone 클래스가 있을때,
- IPhone타입의 참조변수 i는 조상타입인 Phone으로 형변환이 가능하다.
- IPhone과 AndroidPhone은 상속관계가 아니기 때문에 형변환이 불가능하다.
IPhone i = new IPhone();
Phone p = (Phone)i; // ok. 조상인 Phone 타입으로 자동형변환(생략가능)
IPhone i2 = (IPhone)p; // ok. 자손인 IPhone 타입으로 형변환(생략불가)
//AndroidPhone a = (AndroidPhone)i; // no. 상속관계가 아닌 클래스 간에는 형변환 불가, IPhone과 AndroidPhone은 상속관계가 아님.
기본형의 형변환과 달리 참조형의 형변환은 변수에 저장된 값(주소값)이 변환되는 것이 아니다.
Phone p = (Phone)i; // i의 값(객체의 주소)을 p에 저장
// 타입을 일치시키기 위해 형변환 필요(생략가능함)
i = (IPhone)p; // 조상타입을 자손타입으로 형변환하는 경우 생략불가함
instanceof 연산자
: 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용하는 연산자
- 주로 조건문에 사용
- (참조변수) instanceof (타입(클래스명))
- 연산의 결과로 boolean 값인 true와 false 중 하나를 반환함
- 연산의 결과로 true를 얻었다면 참조변수가 검사한 타입으로 형변환이 가능하다는 뜻이다.
반응형
'Java > Java 이론' 카테고리의 다른 글
[JAVA 다시보기] 자바기초 (1) | 2023.09.19 |
---|---|
문자열 자료형 (1) | 2023.09.08 |
[JAVA] 인터페이스(interface) (0) | 2023.08.11 |
[JAVA] String 클래스 (0) | 2023.08.10 |
[JAVA] 추상 클래스와 메서드 (0) | 2023.08.10 |