CH7-24,25 참조변수의 형변환(2)
[자바의 정석 - 기초편] ch7-24,25 참조변수의형변환(2)
실습을 해보자.
public class EX7_15 {
public static void main(String[] arg) {
Car car = null;
FireEngine fe = null;
FireEngine fe2 = (FireEngine)car;
Car car2 = (Car)fe2;
car2.dirve();
}
}
class Car {
String color;
int door;
void Car() {
this.color = "white";
this.door = 4;
}
void dirve() {
System.out.println("drive~");
}
void stop() {
System.out.println("stop!");
}
}
class FireEngine extends Car {
void water() {
System.out.println("water!");
}
}
위의 예제는 null 포인트 참조 오류가 난다.
즉 형변환시에는 실제 메모리상의 인스턴스가 무엇인지를 따져야 한다. 그 인스턴스의 멤버변수가 몇 개인지가 중요하다.
만약 메모리상에 있지도 않은 멤버변수를 형변환으로 다루려고 하면, 컴파일시에는 오류가 없다. 자바컴파일러가 안잡아줌. 하지만 런타임동안 그 멤버변수를 다루려고 할때 런타임 오류가 난다.
ClassCastExpection이라는 메세지가 나옴.
CH7-26 instanceof연산자
[자바의 정석 - 기초편] ch7-26 instanceof 연산자
instanceof
연산자는 형변환이 가능한지 여부에 사용하는 연산자로, 가능하면 true를 반환한다.
형변환 하기 전에는 반드시 instanceof연산자로 확인하고 형변환하는 습관을 갖자.
즉 if문으로 instanceof가 true를 반환하면 형변환 되게 코딩하는 습관을 가져야 함.
안전하게 다형성이란 특징을 이용하기 위해선 위의 습관이 중요함.
참고로 instanceof는 조상 클래스에 대해서도 true를 반환한다. 이 문법을 기억해야 instanceof를 잘 사용할 수 있다. 따라서 모든 클래스는 instanceof Object
하면 다 true를 반환함
여기서 제일 중요한걸 다시 정리해주겠다.