공부/Java
자바 상속 - 클래스 타입 변환
진호진호
2024. 2. 14. 15:51
타입 변환
기본적으로 up-casting만 가능, 필요시 자동 변환 됨.
자식 클래스는 부모 클래스 타입으로 사용될 수 있다. 자식 클래스는 기본적으로 부모 클래스의 모든 필드와 메서드 요소를 가지고 있기 때문에 자동 타입변환이 되어도 지장이 없다.
참조 변수 p의 선언 타입 | 참조변수 p의 실제 타입 |
참조 변수 선언에 사용된 타입, Animal | 객체 생성에 사용된 클래스, Human |
호출 가능한 메소드 집합을 결정 | 실제 호출될 클래스를 결정 |
p.eat() 호출 가능 | p.eat() / Human의 eat()이 호출 됨 |
p.think() 호출 불가능 | Human의 think() 호출하려면 (Human)p.think() |
강제 타입 변환(Casting)
부모 타입을 자식 타입으로 변환하는 것. 자식 타입이 부모 타입으로 자동 변환이 일어난 후, 다시 자식 타입으로 변환 할 때 강제타입변환을 사용할 수 있다.
예제
class Parent {
static void who() { System.out.println("Parent’s static who"); }
void show() { System.out.println("Parent’s instance show"); }
}
class Child extends Parent {
static void who() { System.out.println("Child’s static who"); } // 숨김
void show() { System.out.println("Child’s instance show"); } // 재정의
}
public class java {
public static void main(String[] args) {
System.out.println("Child c = new Child: ");
Child c = new Child();
c.who(); c.show();
System.out.println("Parent p = new Child: ");
Parent p = new Child();
p.who(); p.show();
System.out.println("Child c2 = new Child - (Parent)c2: ");
Child c2 = new Child();
((Parent)c2).who(); ((Parent)c2).show();
}
}
실행결과 :
Child c = new Child:
Child’s static who
Child’s instance show
Parent p = new Child:
Parent’s static who
Child’s instance show
Child c2 = new Child - (Parent)c2:
Parent’s static who
Child’s instance show
메소드가 자식 클래스에서 오버라이딩되었다면 오버라이딩된 메소드가 호출된다. → 다형성