무기 a무기 =new 칼();
무기 리모콘이기만 하다면 다 ㅇㅋ
new 칼();
칼 리모콘이 생성된다
칼을 조종하는 리모콘은 무기를 조종하는 리모콘이라고 볼 수 있다?
=>YES
하지만 아래 코드 처럼 짜면 안돌아감
class Main{
public static void main(String[] args) {
무기 a무기=new 칼();
}
class 무기{}
class 칼{}
자바는 칼이 무기인지 모른다.
그래서 상속 시켜줘야한다.
class Main{
public static void main(String[] args) {
무기 a무기=new 칼();
}
class 무기{}
class 칼 extends 무기{}
칼은 무기의 한 종류라고 알려주는 것이다. 칼은 무기야!라고 알려주는것.
class Main{
public static void main(String[] args) {
칼 a무기=new 칼();
}
칼 객체는 heap에 저장되고 a무기는 함수 안에 있는 지역변수니까 steak에 들어감. 그리고 그 a무기 안에는 리모콘이 들어있다.
그리고 그 리모콘이 칼을 가르킨다.
class Main{
public static void main(String[] args) {
칼 a무기=new 칼();
a무기.공격();
}
class 칼 extends 무기{
void 공격() {System.out.println("칼로 공격");
}
무기 안에 든 리모콘의 버튼은 하나 -> 공격버튼
무기 a무기 =new 칼();
이 코드만 보면 맞는 코드임.
무기 a무기 =new 칼();
a무기.공격();
하지만 이건 안됨
왜? 자동형변환 때문
double d=1;
이 때 d에는 int형태가 아닌 double로 자동으로 형태가 변환되서 들어간다. (1.0)
이게 자동형 변환임.
무기 a무기 =new 칼();
무기 a무기 = 칼리모콘;이라고 할 수 있음.
이 때 a무기에는 무기 리모콘만 들어갈 수 있다.
칼 리모콘이 무기 리모콘으로 바꿔서 들어감.
=> 칼 리모콘에 있는 공격버튼이 사라짐.
a무기.공격();
그래서 이게 불가능한것.
class Main{
public static void main(String[] args) {
무기 a무기=new 칼();
a무기.공격();
}
class 무기{
void 공격{}
}
class 칼 extends 무기{
void 공격() {System.out.println("칼로 공격");}
}
이렇게하면 무기에도 공격 버튼 생겨서 ㄱㅊ