📍 시작하기 전에 알면 좋은 지식
- 수퍼 클래스
- 부모클래스인 상속 관계의 상위 클래스
- 서브 클래스 : 자식 클래스인 하우 클래스
class 해장국{
public void 간맞추기(){
// 뭐든 Ok
}
}
class 뼈해장국 extends 해장국{
@Override
public void 간맞추기(){
// 뼈해장국에는 들깨가루 ~!
}
}
class 콩나물해장국 extends 해장국{
@Override
public void 간맞추기(){
// 콩나물해장국에는 고춧가루 ~!
}
}
class 취객 {
public void 해장국먹기(해장국 어떤해장국){
어떤해장국.간맞추기();
}
}
public class CastingTest{
public static void main(String[] args){
취객 취객1 = new 취객();
해장국 해장국한그릇 = new 뼈해장국();
// 해장국(상위 클래스) 타입에 뼈해장국(하위 클래스)를 담음. 업캐스팅 !
취객1.해장국먹기(해장국한그릇);
}
}
🗯 다형성과 상속?
다형성
: 객체가 여러 형태를 가질 수 있음을 의미한다. 따라서 기반 클래스에 있는 메소드를 파생 클래스에서 사용할 때 오버라이딩을 할 수 있다.상속
: 기반클래스로부터 필드, 메소드 등을 그대로물려 받아 새로운 파생 클래스를 만드는 것이다.
class Human{
// 생략
}
class Student extends Human{
// 생략
}
public class CastingTest {
public static void main(String[] args) {
Student student = new Student();
Human human = student;
// 자식 클래스(Student)가 부모 클래스(Human)타입으로 캐스팅
}
}
class Human{
// 생략
}
class Student extends Human{
// 생략
}
public class CastingTest {
public static void main(String[] args) {
Human human = new Human();
Student student = (Student) human;
// 부모 클래스(Human)이 자식 클래스(Student)타입으로 캐스팅
// 실제로 다운캐스팅은 업 캐스팅이 선행된 후 되어야 한다.
}
}
📢 주의!
: 다운캐스팅은 컴파일 에러는 일어나지 않지만, 런타임 에러는 일어남!(Student클래스가 Human클래스보다 구성이 작기 때문) 런타임 에러를 잡기 위해서는 업 캐스팅을 먼저 적용하고 다운 캐스팅을 해주어야 함. -> 업캐스팅된 참조 변수를 이용해서 다운캐스팅 하기
//런타임 에러 발생(ClassCastException) Child child = (Child)new Parent(); //업캐스팅 Parent parent = new Child(); //업캐스팅된 참조변수를 이용해서 다운캐스팅하기 Child child = (Child)parent;