[ 다운 캐스팅 : downCasting ]
- 슈퍼 클래스 타입을 서브 클래스 타입으로 변경(다운캐스팅)
=> 업캐스팅과 반대. ( Object 클래스를 사용할 때 다운캐스팅을 많이 사용함 )
[ 메인 메서드 ]
public class MainWrapper {
public static void ex01() {
Person p = new Student();
p.eat();
p.sleep();
((Student)p).study(); // 슈퍼 클래스 타입 -> 서브 클래스 타입으로 변경(다운캐스팅)
((Worker)p).work(); // 잘못된 캐스팅을 막고 싶다!
}
public static void ex02() {
Person p = new Student();
System.out.println(p instanceof Person); // p가 Person 타입이면 true, 아니면 false
System.out.println(p instanceof Student); // p가 Student 타입이면 true, 아니면 false
System.out.println(p instanceof Worker); // p가 Worker 타입이면 true, 아니면 false
}
public static void ex03() {
Person p1 = new Student();
if(p1 instanceof Student) {
((Student) p1).study(); // p1. 찍고 study()를 고르면 이클립스에서 자동으로 다운캐스팅 해준다.
}
Person p2 = new Worker();
if(p2 instanceof Worker) {
((Worker) p2).work();
}
}
public static void main(String[] args) {
ex02();
}
}
[ 사람 클래스 ]
public class Person {
public void eat() {
System.out.println("냠냠");
}
public void sleep() {
System.out.println("쿨쿨");
}
}
[ 학생 클래스 ]
public class Student extends Person {
public void study() {
System.out.println("공부");
}
}
[ 직장인 클래스 ]
public class Worker extends Person {
public void work() {
System.out.println("일함");
}
}