공부/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

 

메소드가 자식 클래스에서 오버라이딩되었다면 오버라이딩된 메소드가 호출된다. → 다형성