다운캐스팅 : 부모 -> 자식
업캐스팅 : 자식 -> 부모
Car 클래스
class Car {
String color;
int door;
public void drive() {
System.out.println("drive!");
}
public void stop() {
System.out.println("Stop!");
}
}
FireEngine 클래스
class FireEngine extends Car {
public void water() {
System.out.println("water!");
}
}
FireEngine f = new FireEngine();
Car c = (Car)f; //OK. 조상인 Car타입으로 형변환(생략가능)
FireEngine f2 = (FireEngine)c; //OK. 자손인 FireEngine타입으로 형변환(생략불가)
Ambulance a = (Ambulance)f; //에러. 상속관계가 아닌 클래스 간의 형변환 불가
FireEngine f = new FireEngine();
f -> 객체를 사용할 수 있는 멤버 5개
Car c = (Car)f;
c -> 객체를 사용할 수 있는 멤버 4개
FireEngine f2 = (FireEngine)c;
f2 -> 객체를 사용할 수 있는 멤버 5개
Car 클래스
class Car {
String color;
int door;
public void drive() {
System.out.println("drive!");
}
public void stop() {
System.out.println("Stop!");
}
}
FireEngine 클래스
class FireEngine extends Car {
public void water() {
System.out.println("water!");
}
}
ReferenceVariable 클래스
public class ReferenceVariable {
public static void main(String[] args) {
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
fe.water();
car = fe2;
car.water(); // 컴파일 에러! Car타입의 참조변수로는 water()를 호출할 수 없다.
fe2 = (FireEngine)car; // 자손타입 <- 조상타입 형변환 생략 불가
fe2.water();
}
}
fe2 = (FireEngine)car; // 컴파일 OK. 형변환 에러.
// Error
Exception in thread "main" java.lang.ClassCastException:
class Javabasic.Car cannot be cast to class Javabasic.FireEngine
(Javabasic.Car and Javabasic.FireEngine are in unnamed module of loader 'app')
at Javabasic.Ex7_7.main(Ex7_7.java:27)
void doWork(Car c) { //Car의 자손은 다 올 수 있다.
if (c instanceof FireEngine) {
FireEngine fe = (FireEngine)c;
fe.water();
}