프로그래밍 언어/자바의 정석 기초편

자바의 정석 기초편 ch7-24,25 참조변수의 형변환(1)

life grow 2022. 9. 3. 17:07

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개로 증가시키는 것은 안전하지 않다.

새로 늘어난 한개를 실제 객체가 쓸 수 있는지, 없는지 알 수 없다.

그래서 형변환 생략할 수 없다.