상세 컨텐츠

본문 제목

[JAVA] 개념 : 리모콘 형변환의 이해

Study/자바

by 개발성훈 2020. 4. 24. 18:31

본문

수동형변환, 자동형변환

class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
원숭이 a원숭이 = new 원숭이();

//리모콘 = 레퍼런스 변수안에 들어있는 객체의 주소, 즉 레퍼런스

// 1 : 현재 코드는 원숭이 리모콘이 동물리모콘으로 변환될때 버튼을 하나 뽑고 들어가는것(동물리모콘화)이므로 실행 가능하다.
동물 a동물 = a원숭이;

원숭이 a원숭이2 = null; // null 은 쓰레기 리모콘이라는 뜻

//2 : a원숭이2는 원숭이를 가리키는 리모콘이고 클래스 안에 버튼이 총 3개가 들어있고, a동물은 동물을 가리키는 리모콘이다. 동물 리모콘은 동물을 가리키고 있어서 현재 사람을 가리키는지 원숭이를 가리키는지 동물을 가리키는지 정확하게 알 수가 없으므로 실행 불가능하다.
// a원숭이2 = a동물;

// 3 : a동물이 가리키는 것은 동물리모콘이므로 사실상 우리가 무엇을 가리키는지 잘 모른다. 하지만 가리키는 대상을 수동적으로 형변환 해주면 자바는 개발자를 믿고 프로그램을 진행시키기 때문에 실행 가능하다. (동물 리모콘을 원숭이화 시킴)
a원숭이2 = (원숭이)a동물;

사람 a사람2 = null;

//4 : 프로그램은 위에서 아래로 실행이 된다. 현재 동물 리모콘은 원숭이리모콘화 되었고, 리모콘은 여러 객체를 가리킬 수없으므로 사람 리모콘으로 수동형변환을 한다고해서 프로그램의 에러가 안발생하지 않고, 나중에 예외처리로 에러가 발생한다.(런타임 에러)
// a사람2 = (사람)a동물;
  }
}
abstract class 동물 {
void 숨쉬다() {
System.out.println(“동물이 숨을 쉽니다.”);
}
}
class 사람 extends 동물 {
void 말하다() {
System.out.println(“사람이 말을 합니다.”);
}
}
class 원숭이 extends 동물 {
void 원숭이묘기를하다() {
System.out.println(“원숭이묘기를하다.”);
}
}

관련글 더보기