반응형
업 캐스팅
- 서브클래스에서 슈퍼클래스로 참조형 형 변환하는 것
- 자동 형 변환(묵시적 형 변환)이 일어남
- 참조 가능한 영역이 축소된다.
- 서브클래스 인스턴스의 멤버 중 공통 항목을 제외한 나머지를 포기 선안 하는 것
- 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 |
댓글