업캐스팅(자동 타입변환), 다운캐스팅(강제 타입변환)

kmb·2022년 1월 19일
0

자바

목록 보기
14/31
post-thumbnail

캐스팅

데이터 타입(type)을 다른 데이터 타입으로 변환하는것을 의미한다. 형 변환이라고도 한다.


업캐스팅(자동 타입변환)

프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것.
자동 타입변환의 경우, 자식이 부모의 특징과 기능을 상속 받기 때문에 부모와 동일하게 취급된다.

 

ex) 자동 타입변환 (업캐스팅) 예시

public class Parent {
	
    public void method1() {
    	System.out.println("Parent-method1()");
    }
    
    public void method2() {
   		System.out.println("Parent-method2()");
    }
}

public class Child extends Parent {
	
    @Override
    public void method2() {
    	System.out.println("Child-method2()");  // 메서드 재정의
    }
    
    public void method3() {
    	System.out.println("Child-method3()");
    }	
}

public class ChildExample {
	
    public static void main(String[] args) {
    	
        Child child = new Child();
        
        Parent parent = child;    // 업캐스팅(자동 타입변환)   자식타입 -> 부모타입
		
        parent.method1();   // 가능함
        parent.method2();   // 가능함 (자식클래스에서 재정의된 메서드가 호출됨)
        parent.method3();   // 불가능함

    }
}

 


다운캐스팅(강제 타입변환)

자신의 고유한 특성을 잃은 서브 클래스의 객체를 다시 복구 시키는것. (자식 타입이 자동 타입변환에 의해 부모 타입으로 변한 이후에 다시 자식 타입으로 변환되는것)

모든 부모 타입이 자식 타입으로 다운캐스팅 할 수 없으며
기존에 자식 타입이 부모 타입으로 자동 타입변환 되었을 경우에만 다운캐스팅을 이용하여 다시 자식 타입으로 변환할 수 있다.

 

ex) 다운캐스팅 (강제 타입 변환) 예시

public class Parent {
	
    public String field1;
    
    public void method1() {
    	System.out.println("Parent-method1()");
    }
    
    public void method2() {
   		System.out.println("Parent-method2()");
    }
}

public class Child extends Parent {
	
    public String field2;
    
    public void method3() {
    	System.out.println("Child-method3()");
    }
}

public class ChildExample {
	
    public static void main(String[] args) {
    	
        Parent parent = new Child();  // 업캐스팅(자동 타입변환)   자식타입 -> 부모타입
        
        parent.field1 = "data1";  // 가능함
        parent.method1();		  // 가능함	
        parent.method2();         // 가능함
        
        parent.field2 = "data2";  // 불가능함
        parent.method3();         // 불가능함
        
        
        Child child = (Child) parent;  // 다운캐스팅(강제 타입변환)   부모타입 -> 자식타입
        
        child.field2 = "data2"    // 가능함
        child.method3();		  // 가능함
    }
}

 

출처

  • 이지업 컨텐츠 내의 데어프로그래밍 자바강의
  • 이것이 자바다 (책)
profile
꾸준하게

0개의 댓글