✔️ 캐스팅
캐스팅이란?
- 타입을 변환하는 형변환을 뜻하며 이때, 상속 관계에 있는 부모와 자식 클래스 간에서 서로 형변환이 가능함
- 캐스팅을 통해 오버라이딩된 함수를 분리해서 사용할 수 있으며, (다형성)
범용적인 프로그래밍이 가능함 (상속)
업캐스팅 (묵시적 형변환)
- 자식(서브) 클래스가 부모(수퍼) 클래스 타입으로 캐스팅 되는 것
- 부모(수퍼) 클래스의 참조변수는 자식(서브) 클래스로 객체화된 인스턴스를 가리킬 수 있게 됨
- 캐스팅이 자동으로 발생함
Parent p = new Child(); // Parent를 상속받은 Child는 Parent의 속성을 포함하므로 (Parent) new Child()할 필요가 없음
다운캐스팅 (명시적 형변환)
- 부모(수퍼) 클래스가 자식(서브) 클래스 타입으로 캐스팅 되는 것
- 캐스팅할 내용을 적어줘야 함
- 다운캐스팅은 먼저 업캐스팅이 발생한 이후에 작용함
Parent p = new Child();
Child c = (Child) p;
class Parent {
int age;
Parent() {}
Parent(int age) {
this.age = age;
}
void printInfo() {
System.out.println("Parent Call!!!");
}
}
class Child extends Parent {
String name;
Child() {}
Child(int age, String name) {
super(age);
this.name = name;
}
@Override
void printInfo() {
System.out.println("Child Call!!!");
}
}
public class test {
public static void main(String[] args) {
Parent p = new Child();
// 자바에서는 오버라이딩된 함수를 동적 바인딩하기 때문에, Parent에 담겼어도 Child의 printInfo() 함수를 불러옴
p.printInfo(); // Child Call!!! 출력
// Child 클래스에 Parent 클래스를 넣을 수 없음
Child c = (Child) new Parent(); // Runtime Error 발생
}
}