📌 업캐스팅
자식타입 > 부모타입 으로 형변환 되는 것// Phone 부모타입 HandPhone 자식타입 // 업캐스팅 1 Phone p1 = new HandPhone("HandPhone1", true); // 업캐스팅 2 HandPhone hp = new HandPhone("HandPhone2", true); Phone p2 = hp;
부모가 정의한 멤버에만 접근가능
📌 다운캐스팅
부모타입 > 자식타입 으로 형변환 되는 것
업캐스팅한 인스턴트만 다운캐스팅으로 형변환할 것
그렇지 않은 경우 오류발생 가능성 있음HandPhone hp2 = (HandPhone) p2;
📌 instanceof 로 형변환가능여부 체크하기
A instanceof B
: A가 B로 형변환 가능한가요?class Car { } class Bus extends Car { } class Bongo extends Bus { } class Ambulance extends Bus { }
public class InstanceCheck
main메소드
Car car = new Car(); Car bus = new Bus(); Car bongo = new Bongo(); Car ambulance = new Ambulance();
System.out.println("bus instance of Car : " + (bus instanceof Car)); // 동일타입 : true System.out.println("bus instance of Bus : " + (bus instanceof Bus)); // 부모타입 > 자식타입 (다운캐스팅) : true System.out.println("bus instance of Object : " + (bus instanceof Object)); // 자식타입 > 부모타입 (업캐스팅) : true System.out.println("bus instance of Bongo : " + (bus instanceof Bongo)); // 부모타입 > 자식타입 (강제형변환) : false System.out.println("bongo instance of Ambulance : " + (bongo instanceof Ambulance)); // 형제타입 : false System.out.println("ambulance instance of Object : " + (ambulance instanceof Object)); // 자식타입 > 최상위Object : true