JAVA 26강

주바나·2023년 3월 6일
0

JAVA 기초

목록 보기
8/16
post-thumbnail

상속


무기 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("칼로 공격");}
}

이렇게하면 무기에도 공격 버튼 생겨서 ㄱㅊ

profile
BE -JAVA,Spring boot

0개의 댓글