자바의정석/Chapter 7

ch7-24 참조변수의 형변환

suniverse 2022. 12. 15. 22:23

- 사용할 수 있는 멤버의 갯수를 조절하는 것 

그 이외는 아무것도 변하지 않는다. 기본형처럼 값이 달라지지 않는다

- 조상 자손 관계의 참조변수는 서로 형변환 가능 

멤버는 총 5개

 

- 형변환 연산자 생략 유무는 크게 중요하지 않는다. 오류나면 그냥 써주면 된다 

조상 자손관계는 서로 형변환 가능하다는 걸 알아주면 된다 

 

c.color c.door c.drive c.stop은 가능하지만 c.water는 선언이 안 되어 이기 때문에 불가능하다 

FireEngine는 5개 전부 가능하다 

 

- 리모콘을 사용함으로서 사용할 수 있는 멤버의 갯수를 늘렸다 줄였다 하는 것 

 

--------------------------------

참조변수의 형변환 2

 

하지만 실행하면 오류가 난다

 

 

 

** 실제 객체가 가진 멤버 개수를 확인하고 그걸 넘지 않는 게 중요하다. 넘지만 않으면 줄이고 늘리는 건 상관없다 

컴파일러는 속는다. 형변환 타입만 맞으면 ok. 실제로는 water가 없기 떄문에 오류가 난다

 

** 그러니 형변환의 타입보다 실제 가리키는 객체가 무엇인지 중요하다. 멤버의 개수를 넘어서면 안 된다 

----------------------------------------------------

 

ch7-26 instanceof 연산자 

 

- 참조변수의 형변환 가능여부 확인에 사용. 가능하면 true반환

- 형변환 전에 반드시 instanceof로 확인해야 함 

 

형변환 전에는 반드시 instanceof 연산자로 형변환 해도 되는지 확인해야 한다. 

조상들도 다 참이 나온다

 

 

Q. 참조변수의 형변환은 왜 하나요?

참조변수(리모콘)을 변경함으로써 사용할 수 있는 멤버의 갯수를 조절하기 위해서 

--> 객체도 그대로, 참조변수의 값도 그대로다. 참조변수의 타입만 달라진다! 

 

Q.  instanceof연산자는 언제 사용하나요? 

참조변수를 형변환하기 전에 형변환 가능여부를 사용할 때 

 

---------------------------------------------------------

ch7-27 매개변수의 다형성 

- 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다

 

(장점) 

1. 다형적 매개변수 

2. 하나의 배열로 여러종류 객체 다루기 

 

(다형성이란) 

1. Tv t = new SmartTv(); --> 조상타입의 참조변수로 자손 다루기 

2. 참조변수의 형변환 --> 리모콘 바꾸기. 사용가능한 멤버갯수 조절 

3. instancef 연산자 --> 형변환 가능여부 체크 

 

오버로딩 --> 메서드 이름이 같고, 매개변수 타입이 다른게 오버로딩

그런데 물건이 다양하니 그때마다 매번 메서드를 추가하면 복잡해진다 

그래서 이렇게 줄여준다. 

 

이 메서드 하나로 여러 물건을 살 수 있다

 

매개변수 타입이 Product인 메서드 하나로 모든 물건들을 살 수 있다. 이게 바로 다형성의 첫번째장점이다 .

 

 

 

이거랑 똑같은 말이다

--> Tv 객체를 만들고 그걸 Product 타입의 참조변수로 다루고 

그걸 넘겨주는 것 

p에 Tv가 들어가있으니까 

메인메서드 안에서 이 Tv를 사용할 수 없다 . 리모콘이 없으니까 

근데 이 buy메서드 안에서는 쓸 수 있다. 리모콘 Product p를 받으니까