N스크린하이브리드앱과정/JAVA

[2주][3일][5~7교시] JAVA: 레퍼런스 형변환. 업캐스팅과 다운캐스팅

광천스러움 2013. 7. 24. 15:12

*레퍼런스 형변환 - 업캐스팅 실습(1)

Shape(부모클래스)와 Cir,Rec,Tri(자식클래스)

 

메인 메서드

본래는 이런 식으로 객체를 여러개 생성하지만,

 

업캐스팅 사용: 부모=자식

  부모=자식 으로 업캐스팅한 참조변수 s는 같은 메서드로 출력이 가능해 편리하다.

참조변수가 그때그때 다른 자식클래스로 대체가 된다는 것인데, 이렇게 객체의 재사용이 가능하다!

 

  Shape s = null; 의 뜻은 참조변수(객체) s를 초기화시킨다는 의미이다.

즉, 자료형에서 int n=0; 으로 지정해주는 것과 같은 개념이라고 생각하면 된다.

 

결과

 

 

 

*업캐스팅 실습(2)

 - 문제 : 다음과 같은 클래스와 메서드를 만들고,

              객체를 생성하여 아래와 같은 결과가 나오도록 출력하라.

 

결과

 

정답 - 클래스 생성

 

메인 메서드

 

 

 

*형변환의 비교(자료형 <-> 레퍼런스형) 

부모클래스와 자식클래스

 

메인메서드 - 자료형과 레퍼런스형의 비교

(1) 자료형

     작은 공간 -> 큰 공간 = 자동 형변환

     큰 공간 -> 작은 공간 = 명시적 형변환

(2) 레퍼런스형

     "부모=자식" : 자동 형변환

     "자식=부모" : 명시적 형변환

     --> 자식이 부모보다 공간이 더 크다!!

 

업캐스팅과 다운캐스팅

(1) 업캐스팅 : 오버라이딩된 부모메서드는 접근 가능하지만,

                    자식메서드는 접근할 수 없다! 따라서 호출도 불가능!

(2) 다운캐스팅 : 명시적 형변환을 통해 부모와 자식메서드에 모두 호출 가능하다!

 c3=p3; 의 경우, 명시적 형변환이 이루어지지 않았으므로 오류가 생긴다.

이렇게 다운캐스팅은 명시적 형변환이 이루어져야 한다.

 

 

*부모=자식(업캐스팅) 실습

Parent3 부모클래스와 Child3 자식클래스

메서드 오버라이딩을 이용해 다음과 같이 작성을 하였다.

 

메인 메서드

무엇이 출력될까?

 

결과

자식클래스의 출력문이 실행된다. 왜냐? 오버라이딩에 의해!

 

하지만 p.childPrn()메서드는 출력되지 않는다.

왜냐하면, 자식의 공간이 더 크기 때문이고, 또한 부모 클래스에는 자식클래스의 출력문이 없기 때문이다.

  따라서 이 상황에서 자식클래스의 childPrn()메서드를 출력하려면, "자식=부모"로 다운캐스팅을 해줘야 가능하다.

 

 

/(ㅇ_ㅇ)/ 갈수록 힘들다아~~