*레퍼런스 형변환 - 업캐스팅 실습(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()메서드를 출력하려면, "자식=부모"로 다운캐스팅을 해줘야 가능하다.
/(ㅇ_ㅇ)/ 갈수록 힘들다아~~
'N스크린하이브리드앱과정 > JAVA' 카테고리의 다른 글
[2주][3일][8교시] JAVA 연습문제(for문)(2) (0) | 2013.07.24 |
---|---|
[2주][3일][5~7교시] JAVA: static의 활용. 실습 (0) | 2013.07.24 |
[2주][3일][3~4교시] JAVA: 메서드 오버라이딩, 생성자 오버라이딩 (0) | 2013.07.24 |
[2주][2일][8교시] JAVA 연습문제(for문)(1) (0) | 2013.07.23 |
[2주][2일] 메서드 오버라이딩 (0) | 2013.07.23 |