
Parent parent = new Child();
List<int> l = new ArrayList()<>;(Parent → Child) : 다운캐스팅 (명시적 변환 필요)Child child = (Child) parent;
Animal animal = new Cat(); // O
Animal animal = new Dog(); // O
Dog dog = new Cat(); // X
Cat cat = new Dog(); // X
// 1. 나누어 대입
Parent parent;
Child child = new Child();
parent = (Parent) child; // O
parent = child; // O
// 2. 한번에 대입
Parent parent = new Child(); // O
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Bark");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog(); // 업캐스팅
myDog.makeSound(); // "Bark" 출력
}
}
-> myDog는 Animal 타입으로 업캐스팅 되었지만, 실제로는 Dog 객체이기 떄문에 메서드 호출 시 실제 객체의 타입에 맞는 makeSound()가 실행된다.
Parent parent;
CHild child = new Child();
parent = child; // upcasting
Child new_child = (Child) parent; //downcasting 1
new_child.method이름;
((Child) parent).method이름; //downcasting 2
Parent parent = new Parent();
Child new_child = (Child) parent; // X, error
Child new_child = new Parent(); // X, error
객체 instanceof 클래스
instanceof 연산자는 객체 타입을 확인하는 연산자로, true/false로 결과를 반환한다.
if (child instanceof Parent)
Parent new_parent = child; // upcasting
else
System.out.println("업캐스팅 불가능");
if (parent instanceof Child)
Child new_child = (Child) parent; // downcasting
else
System.out.println("다운캐스팅 불가능");