본문 바로가기
Programming/Java

자바 업캐스팅, 다운캐스팅

by hyunipad 2021. 1. 7.
반응형

업 캐스팅


  • 서브클래스에서 슈퍼클래스로 참조형 형 변환하는 것
  • 자동 형 변환(묵시적 형 변환)이 일어남
  • 참조 가능한 영역이 축소된다.
  • 서브클래스 인스턴스의 멤버 중 공통 항목을 제외한 나머지를 포기 선안 하는 것
    • but 하나의 슈퍼클래스 타입으로 여러 서브클래스 인스턴스를 참조할 수 있다.

 

 

다운 캐스팅


  • 슈퍼클래스에서 서브클래스로 참조형 형 변한 하는 것
  • 강제 형 변환(명시적 형 변환) 필수
  • 참조 가능한 영역이 확대된다.

대부분의 다운 캐스팅은 혀용 되지 않는다.

이미 업 캐스팅된 레퍼런스를 다시 다운 캐스팅하는 경우에만 안전하다!!

 

코드 예시


public class CastingEx {

​

     public static void main(String[] args) {

          SuperClass superclass = new SuperClass();  // 슈퍼클래스 인스턴스 생성

          SubClass subclass = new SubClass();  // 서브클래스 인스턴스 생성

​

          superclass.SuperPrn(); // 슈퍼클래스 자신의 메서드

          subclass.SubPrn(); // 서브클래스 자신의 메서드

          subclass.SuperPrn(); // 서브클래스가 상속받은 슈퍼클래스의 메서드

​

          System.out.println("==========================================");

​

          SubClass subclass2 = new SubClass();  

          SuperClass superclass2;

​

          superclass2 = subclass2;  // subclass2 = > superclass2 로 업캐스팅 (자동 형변환)

​

          superclass2.SuperPrn();

         => 업캐스팅한 후에는 상속받은 메서드 즉 공통적으로 가지고 있는 메서드만 호출 가능 !

​

          System.out.println("===========================================");

​

          subclass2 = (SubClass)superclass2;  // superclass2 => subclass2 로 다운캐스팅 ( 강제 형변환 ) 

         => superclass2로 업캐스팅을 이미 했기 때문에 다운캐스팅 해도 안전하다 !

          subclass2.SubPrn();       // 참조영역이 확대 되었기 때문에 부를 수 있는 메서드가 늘어남 ( 1개 => 2개 )

          subclass2.SuperPrn();

     }

​

}

​

class SuperClass {  // 슈퍼클래스 정의

     public void SuperPrn() {  // 슈퍼클래스의 메서드

          System.out.println("슈퍼클래스의 SuperPrn() 메서드 ");

     }

}

​

class SubClass extends SuperClass{  // 서브클래스 정의

​

     public void SubPrn() {  // 서브클래스의 메서드

          System.out.println("서브클래스의 SubPrn() 메서드");

     }

}

반응형

'Programming > Java' 카테고리의 다른 글

자바 다형성(Polymorphism)  (1) 2021.01.09
자바 instanceof 연산자  (0) 2021.01.08
자바 super()  (0) 2021.01.06
자바 상속과 오버라이딩  (0) 2021.01.06
자바 싱글톤 패턴, 싱글톤 패턴 예시  (0) 2021.01.06

댓글