자바의 정석 기초편 ch7-24,25 참조변수의 형변환(1)
7-24 참조변수의 형변환
- 참조변수의 형변환 결과: 사용할 수 있는 멤버의 갯수를 조절하는 것
주소값, 객체 하나도 안바뀌고 멤버 개수만 바뀐다.
기본형의 형변환
3.6 (int) -> 3 값이 바뀐다.
- 조상, 자손 관계의 참조변수는 서로 형변환 가능
형제끼리는 형변환 불가
Car - FireEngine은 형변환 가능
Car - Ambulance도 형변환 가능
FireEngine - Ambulance 형변환 불가
Car c = (Car)f; < 이때는 형변환 생략가능
참조변수 c에다가 참조변수 f의 값을 저장한다.
f와 c는 같은 객체를 가리키게 된다.
근데 c의 타입은 Car고 f의 타입은 FireEngine이다. <불일치
생략가능, 생략불가가 중요한 게 아니다.
왜냐하면 형변환 연산자를 무조건 써주면 된다.
여기에 신경을 너무 쓰지 말자.
조상, 자손 관계만 형변환 가능하다!는 것만 알면된다.
FireEngine f의 타입이 FireEngine 인스턴스와 일치한다.
그럼 멤버5개를 다 사용할 수 있다.
근데 Car 타입의 참조변수와 FireEngine 인스턴스의 타입이 불일치한다.
Car에는 멤버가 4개밖에 없어서
Car 타입의 참조변수 c로 다룰 수 있는 멤버는 4개다.
c.water() 불가능!
f와 c가 같은 객체를 가리키고 있다.
그러나 f라는 리모컨으로는 FireEngine 인스턴스의 멤버 5개를 사용할 수 있고
c라는 리모콘으로는 FireEngine 인스턴스의 멤버 4개를 사용할 수 있다.
리모컨을 변경하면 사용할 수 있는 멤버의 개수를 조절하는 것이다.(늘었다, 줄었다)
= 참조변수의 형변환
Ambulance a = (Ambulance)f; < 형제 관계라서 형변환 불가능
7-25 참조변수의 형변환 - 예제
5개에서 4개로 줄이는 것은 안전하다.
형변환 생략가능
4개에서 5개로 증가시키는 것은 안전하지 않다.
새로 늘어난 한개를 실제 객체가 쓸 수 있는지, 없는지 알 수 없다.
그래서 형변환 생략할 수 없다.