• 서브 클래스의 객체를 슈퍼 클래스 타입으로 타입 변환하는 것
• 서브 클래스의 객체는 슈퍼 클래스의 모든 멤버를 가지고 있다.
-> 슈퍼 클래스의 객체로 취급 가능
• 업캐스팅된 레퍼런스는 슈퍼 클래스의 멤버만 접근 가능하다.
class NumberOne {
.....
}
class NumberTwo extends NumberOne {
.....
}
public class UpcastingExample {
public static void main(String[] args) {
NumberTwo numberTwo = new NumberTwo();
NumberOne numberOne = numberTwo; // 업캐스팅
// 자동으로 타입이 변환된다.
}
}
• 슈퍼 클래스의 객체를 서브 클래스 타입으로 타입 변환하는 것
• 명시적으로 타입을 변환하여야 한다.
class NumberOne {
.....
}
class NumberTwo extends NumberOne {
.....
}
public class DowncastingExample {
public static void main(String[] args) {
NumberOne numberOne = new NumberTwo(); // 업캐스팅
...
NumberTwo numberTwo = (NumberTwo)numberOne; // 다운캐스팅
// (NumberTwo)와 같이 타입 변환의 명시적 표시가 필요하다.
}
}
• 업캐스팅된 레퍼런스는 객체의 타입을 판단하기 어렵다.
-> 여러 서브 클래스가 슈퍼 클래스를 상속하기 때문
• 레퍼런스가 가리키는 객체의 타입을 식별하기 위해 사용
• instanceof 연산자는 객체에 대한 레퍼런스만 사용할 수 있다.
객체레퍼런스 instanceof 클래스타입
-> true 또는 false 값 반환
if(10 instanceof int) // 문법 오류
if("JAVA" instanceof String) // String은 사용 가능