업캐스팅
- 자식 타입이 부모 타입으로 올라가면서 형전환이 가능하다.
- 부모타입 변수는 자식타입 객체의 부모 영역만 보고 있다.
- 언제나 접근이 가능하다.
Object obj = new Person();
Person person = new Child();
다운캐스팅
- 부모타입이 자식 타입으로 내려가면서 형전환이 되는 경우다.
- 원칙상 불가능하다. 그러나 원상복구 (자식 ⇒ 부모 ⇒ 자식)일 경우에만 강제 형전환을 허용
대표적인 예시
equals 메소드를 오버라이딩 할 때
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Parent parent = (Parent) o;
return x == parent.x && y == parent.y && z == parent.z;
}
ArrayList를 사용할 때
List list = new ArrayList<>();
list.add(new Child(1,1,1,1)); //업캐스팅
list.add(new Child(2,1,1,1)); //업캐스팅
list.add(new Child(1,3,1,1)); //업캐스팅
list.add(new Child(1,1,4,1)); //업캐스팅
for(int i=0; i<list.size();i++){
Child temp = (Child)list.get(i);//다운캐스팅 -> 강제 형변환해줘야함.
temp.output();
}
하지만 제네릭이라는 개념이 생긴이후 위 예시와 같은 방법은 더 이상 사용하지 않도록 한다.