다형성(polymorphism)이란?
같은 타입이지만 실행 결과가 다양한 객체로 대입 가능한 성질
부모타입에는 모든 자식 객체가 대입 가능하다.
예를 들면 부모클래스 Parent와 자식 클래스 Child가 있을 때
Parent parent = new Child();
위 코드가 가능하다는 뜻이다.
그러나 여기서 parent를 Child 의 인스턴스와 똑같이 생각하면 안되는 이유가 있다.
예를 들어 설명해보면
Parent class
public class Parent {
// 필드
int field1;
// 메소드
public void method1() {
System.out.println("Parent : method1");
}
public void method2() {
System.out.println("Parent : method2");
}
}
Child class
public class Child extends Parent {
// 필드
int field2;
// 메소드
@Override
public void method2() {
System.out.println("Child : method2");
}
void method3() {
System.out.println("Child : method3");
}
}
라고 했을 때,
public class CastingExample {
public static void main(String[] args) {
Parent parent = new Child();
parent.field1 = 20;
// parent.field2 = 30; 접근 불가
parent.method2();
parent.method1();
// parent.method3(); 접근 불가
// 부모클래스 = new 자식 클래스 로 형변환한 경우 부모의 필드, 메소드만 접근 가능하고 재정의한 경우 자식의 메소드를 호출한다.
}
}
위와 같이 Child에만 있는 메소드나 필드에서는 접근할 수 없고, Override한 경우 Child의 메소드를 호출한다는 것.
이 것을 가능하게 하기 위한 방법이 Casting(형변환)이다.
위에서 주석으로 처리된 코드를
((Child) parent).method3();
((Child) parent).field2 = 30;
이렇게 강제 형변환을 해주면 오류가 뜨지 않는다.
실행해보면

위를 보면 Override하지 않은, Child에만 있는 method3이 실행된 것을 볼 수 있다.
'Study > Java' 카테고리의 다른 글
| Java - 상속_super는 무엇인가? (0) | 2022.07.06 |
|---|---|
| Java - 상속_ 재정의 (Override) (0) | 2022.07.06 |
| Java - 접근 제한자(public이 뭐야) (0) | 2022.07.05 |
| Java - 객체와 상속 (0) | 2022.07.04 |
| Java - 데이터 타입(참조 타입) (0) | 2022.07.01 |