Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- docker
- phaser
- websocket
- tiles.xml
- node.js
- 블록체인
- 알고리즘
- AWS
- CSS
- RDS
- express
- 웹소켓
- 도커
- JSP
- Cookie
- autowired
- Servlet
- Ajax
- 배포
- JavaScript
- EC2
- SQL
- HTML
- model1
- jQuery
- 암호화
- 웹게임
- PL/SQL
- 비트코인
- Spring
Archives
- Today
- Total
記錄
JAVA) Down Casting 본문
<참조형의 경우!!!>
class Parent {
int a = 1;
}
class Child extends Parent {
int b = 2;
}
public class main {
public static void main(String[] args) {
// Down casting 두 가지 경우
// 컴파일은 되지만 error가 발생한다
// Child 타입이 뭔지 모르기 때문에 casting을 하지 못하는 것
// 기본 자료형에서의 형변환의 경우 크기를 이미 알기 때문에
// JVM이 추측을 할 수 있지만
// 참조형인 경우 추측이 불가하므로 JVM이 강제로 casting을 못한다
// 즉, 참조형을 선언하고 초기화 할 경우(힙에 올릴 경우)
// 다형성(부모클래스 변수가 자식클래스를 참조가능)을 제외하고
// 클래스가 불일치한 선언 후 초기화는 불가능하다!!
Child child1 = (Child) new Parent();
// 다형성을 따르는 선언 후 초기화이므로 정상적 코드
Parent parent = new Child();
// 하지만 타입을 부모클래스로 받아서
// 자식 자원을 보지 못해서 b는 invisible이 된다
parent.a = 5; // visible
// parent.b // invisible
// Down casting 후 정상적으로 자원이 다 보이고 있음
Child child2 = (Child) parent;
child2.a = 5;
child2.b = 5;
}
참조형 자료에서의 Casting의 경우 기본적으로 Casting은 상속관계에서 사용됨을 유의!
기본 자료형의 Casting과는 성질이 다르다!
<primitive data type의 경우>
<<명시적 형변환 vs 암시적 형변환>>
자료형에 따라 Byte가 각각 다른데 동일한 크기 또는 작은 크기의 자료형을 큰 크기의 자료형으로 변환할 경우
컴파일러는 암묵적으로 자료형을 변환해 준다.
하지만 반대로 큰 크기의 자료형을 작은 크기의 자료형으로 변환할 경우 작은 것이 큰 것을 다 담을 수 없기 때문에
명시적 표현이 필요하며 이 경우 때에 따라 컴파일러는 데이터를 버리고 적용한다.
(예를 들면 double을 int로 변환할 경우 소수점 이하는 버린다)
정리: 작은 것을 큰 것에 할당 => '암묵적 형변환'이 일어난다
큰 것을 작은 것에 할당 => (크기가 커서 못담으니까) '명시적 형변환'이 필요하다.
그리고 경우에 따라 데이터 손실이 발생한다.
'Computer language > JAVA' 카테고리의 다른 글
JAVA) Stream (0) | 2018.02.14 |
---|---|
JAVA) ' .equlas ' 와 ' == ' 의 차이 (0) | 2018.02.13 |
JAVA) 컬렉션 프레임워크(Collection Framework) (0) | 2018.02.09 |
JAVA) 메모리 구조 -2 (수정중) (0) | 2018.02.08 |
JAVA) 메모리 구조 -1 (0) | 2018.02.08 |
Comments