UpCating
자식타입을 부모타입으로 형변환
자동형변환
ex) Car c = new Sonata();
DownCating
부모타입을 자식타입으로 형변환
강제형변환, 업캐스팅 관계에 있을 때만 가능
ex) ((Sonata)c).moveSonata();
1. 부모타입의 레퍼런스(참조변수)로 부모객체를 다루는 경우
Car c1 = new Car("빨간색", "가솔린", 2021);
c1.drive();
// ((Sonata)c1).moveSonata(); Car는 부모 클래스이기 때문
2. 자식타입 레퍼런스(참조변수) 자식객체를 다루는 경우
Avante c2 = new Avante("흰색", "LPG", 2022);
c2.drive(); //Avante 클래스에서 오버라이딩된 drive()호출
c2.moveAvante();
//부모참조변수로 업캐스팅 가능 -> 오버라이딩된 생성된 메모리를 기준으로 호출됨
((Car)c2).drive();
// ((Car)c2).moveAvante(); 업캐스팅시 자식요소의 메모리 접근이 불가
3. 부모타입 레퍼런스(참조변수)로 자식객체를 다루는 경우(업캐스팅)
Car c3 = new Sonata("검정", "디젤", 2023);
// c3.moveSonata(); 부모타입의 참조변수이기 때문에 자식요소의 메서드 접근 불가
((Sonata)c3).moveSonata();
Instanceof
//매개변수에 부모타입 참조변수를 사용하면 모든 자식타입을 받을 수 있음
public void driveCar(Car car) {
//매개변수로 넘어온 car가 실제 메모리 공간에 Avante를 구현하고 있어야 moveAvante() 사용가능
if(car instanceof Avante) {
((Avante)car).moveAvante();
}
}