참조변수의 형변환
- 사용할 수 있는 멤버의 갯수를 조절하는 것
그 외 변하는건 없음.
- 조상, 자손 관계의 참조변수는 서로 형변환 가능
()
형변환 연산자로 변경가능
- 자손의 메소드(조상보다 많음)를 다운캐스팅을 통해 이용할 수 있음
FireEngine f = new FireEngine();
Car c = (Car) f;
- f는 원래 FireEngine의 인스턴스.
f를 FireEngine -> Car형변환 하면 원래 FireEngine의 메소드 5개를 다 사용할 수 있었지만 Car로 변경되면서 원래 Car의 메소드 4개만 사용 가능.(사용할 수 있는 멤버의 갯수가 조절됨)
- 사용할 수 있는 멤버가 증가하는 것은 안전하지 않다. (조상 -> 자손)
-> 그래서 생략불가. 형변환 캐스팅 꼭 적어줘야함. 자동형변환 안됨.
주의사항
- 처음에 인스턴스를 어떤 객체로 만들었는지가 중요하다. ( 실제 가리키는 객체가 무엇인지 )
처음에 조상으로 객체를 만든 후(메서드 4개), 자손(메서드 5개)으로 형변환하면 조상에 없는 자손의 멤버를 부를 때 에러가 날 수 있다.
- 처음에 Car 객체로 인스턴스를 만들면, Car이 가지고 있는 멤버들로만 이루어진 인스턴스가 만들어짐
-> FireEngine으로 형변환하면, 참조변수 fe는 Car의 인스턴스를 가리키지만(0x100) FireEngine의 멤버들을 다 가지고 있지는 않다.
이때, FireEngine에만 있는 멤버를 호출하면 에러발생.
- 형변환 에러가 없고 컴파일도 되지만, 실행시 에러가 뜸.