ch7-24 참조변수의 형변환
결론 : 사용할 수 있는 멤버의 개수를 조절하는 것
- 조상 자손 관계의 참조변수는 서로 형변환 가능
class Car { } // 부모
class FireEngine extends Car { } // 자식
class Ambulance extends Car { } // 자식
class Car {
String color;
int door;
void drive() { // 운전하는 기능
System.out.println("drive, Brrr~");
}
void stop() { // 멈추는 기능
System.out.println("stop!!");
}
}
class FireEngine extends Car {
void water() {
System.out.println("water!");
}
}
FireEngine f = new FireEngine();
// 조종할 수 있는 타입이 5개에서 4개로 줄어듦.
Car c = (Car)f; // OK. 조상이 Car 타입으로 형변환(생략가능)
// 조종할 수 있는 타입이 4개에서 5개로 늘림.
FireEngine f2 = (FireEngine)c; // OK. 자손인 FireEngine타입으로 형변환(생략불가)
Ambulance a = (Ambulance)f; // 에러. 상속관계가 아닌 클래스 간의 형변환 불가
예제)
class Ex7_7 {
public static void main(String arg[]) {
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
fe.water();
car = fe; // 조상 <- 자손타입 형변환 생략
// car.water(); // 컴파일 에러!!! Car타입의 참조변수로는 water()를 호출할 수 없다.
fe2 = (FireEngine)car; // 자손타입 <- 조상타입 형변환 생략불가
fe2.water();
}
}
class Car {
String color;
int door;
void drive(){ // 운전하는 기능
System.out.println("drive. Brrr~");
}
void stop(){ // 멈추는 기능
System.out.println("stop!!");
}
}
class FireEngine extends Car {
void water() {
System.out.println("water!");
}
}
class Ex7_7 {
public static void main(String arg[]) {
Car car = null;
FireEngine fe = null; // 실제 인스턴스가 무엇인지가 중요.
FireEngine fe2 = (FireEngine)car; // 조상-> 자손으로 형변환
Car car2 = (Car)fe2; // 자손-> 조상으로 형변환
car2.drive(); // NullPointerException 발생
}
}
class Ex7_7 {
public static void main(String arg[]) {
Car car = new Car();
FireEngine fe = (FireEngine) car; //형변환 실행 에러. java.lang.ClassCastException
fe.water(); // 컴파일 오케이
}
}
// 실제 인스턴스를 확인하고 멤버변수 개수를 넘어선 안 된다.
'Dev > Java' 카테고리의 다른 글
[Java] 자바의 정석 기초편 ch7-27 매개변수의 다형성 (0) | 2022.06.27 |
---|---|
[Java] 자바의 정석 기초편 ch7-26 instanceof 연산자 (0) | 2022.06.27 |
[Java] 자바의 정석 기초편 ch7-23 다형성(polymorphism) (0) | 2022.06.22 |
[Java] 자바의 정석 기초편 ch7-22 캡슐화와 접근 제어자 (0) | 2022.06.22 |
[Java] 자바의 정석 기초편 ch7-21 접근제어자(access modifier) (0) | 2022.06.21 |