개발의 시작과 끝
2020.02.23 / Day - 10 상속을 통한 캐스팅 허용 본문
a9A - 9~10일차
상속을 통한 캐스팅 허용
class 무기 {
}
class 칼 extends 무기 {
void 공격() {
System.out.println("칼로 공격합니다");
}
무기 a무기 = new 칼();
a무기.공격(); // 출력 : x
칼을 작동시키는 것 a무기는 리모컨으로 원격조종을 하게 된다.
a무기에는 '칼' 객체가 생성된다.
그러면 칼이 공격하기 때문에 칼에 공격 메서드가 들어간다.
하지만 칼에 공격 메서드가 있음에도 불구하고 작동하지 않는 이유는
물려받은 '무기' 메서드에 '공격' 메서드가 없기 때문이다.
-> 기능은 있는데 호출할 수있는 버튼이 없다.
class 무기 {
//메서드의 용도 - 기능, 버튼
void 공격(){
}
}
class 칼 extends 무기 {
void 공격() {
System.out.println("칼로 공격합니다");
}
무기 a무기 = new 칼();
a무기.공격(); // 출력 : 칼로 공격합니다.
'무기 클래스'에서의 공격 메서드는 버튼은 있지만 기능은 작동하지 않는다.
그것을 물려받은 칼 클래스는 오버라이딩의 법칙에 의해 자식 클래스가 활성화 된다.
그래서 '칼 클래스'에서는 버튼과 기능이 같이 작동된다.
형 변환 (Casting)
class 자동차 {
void 달리다() {
}
}
class BMW extends 자동차 {
void 뚜껑오픈() {
}
}
자동차 a = new BMW(); // BMW 리모컨(2개) => 자동차 리모컨 (1개)
BMW b = (BMW)a; // 자동차 리모컨(1개) = BMW 리모컨(2개);
int i = (int)5.5; // 수동 형변환 -> 5.5에서 5로 형변환을 시킨 것이다.
리모컨 버튼이 두개인 BMW 리모컨은 자동차 리모컨으로 변할 때 버튼을 빼기만하면 되기 때문에
자바가 안전하다고 생각해 실행이 되지만, 버튼이 1개인 '자동차' 리모컨은 'BMW' 리모컨으로 들어갈 때
리모컨의 버튼을 추가해야하기 때문에 자바가 위험하다고 생각하여 실행되지 않는다.
하지만 여기서 수동 형 변환을 시키면 자바가 형 변환을 하면서 의아해 하지만 개발자를 믿고 형 변환을 한다.
자동 형변환에서 자바가 중요하게 생각하는 포인트는 안전이다. 안전하다고 생각하면 자바는 자동 형 변환을 해준다.
제품안에있는 기능보다 리모컨의 버튼 갯수가 많으면 자바는 위험하다고 생각한다.
리모컨에 버튼을 추가하는 것은 항상 안전하지는 않다.
'자바 공부' 카테고리의 다른 글
2020.03.03 / Day - 19 구성 (0) | 2020.03.03 |
---|---|
2020.02.26 / Day - 13 영역 (0) | 2020.02.26 |
2020.02.23 / Day - 10 상속, 메서드 오버라이딩 (0) | 2020.02.23 |
2020.02.22 / Day - 9 static 메서드, 매개변수, 리턴 (0) | 2020.02.22 |
2020.02.19 / Day - 6 레퍼런스 변수 (0) | 2020.02.19 |