다운캐스팅
- 업캐스팅 된 서브클래스 객체를 다시 서브클래스 타입으로 변환하는 것
- 강제로 타입을 변환하는 casting 방식으로 처리해야 함
- 업캐스팅의 문제를 해결하기 위한 또 다른 방법
Person 클래스
public class Person { public void eat() { System.out.println("먹는다."); } }
Student 클래스
public class Student extends Person { public void study() { System.out.println("공부한다."); } }
Alba 클래스
public class Alba extends Student { public void work() { System.out.println("일한다."); } }
instanceof 연산자
- 특정 인스턴스가 어떤 클래스타입인지 점검하는 연산자
- 해당 클래스타입이면 true 반환, 아니면 false 반환
Main 클래스
Person p = new Alba(); // 업캐스팅 System.out.println(p instanceof Person); // true System.out.println(p instanceof Student); // true System.out.println(p instanceof Alba); // true if(p instanceof Student) { ((Student) p).study(); // 다운캐스팅 } // p가 Student타입의 인스턴스이면 study() 메소드를 호출할 수 있다. if(p instanceof Alba) { ((Alba) p).work(); } // p가 Alba타입의 인스턴스이면 work() 메소드를 호출할 수 있다.
출력:
true
true
true
공부한다.
일한다.