목차


회차 일정 시간 주제 상세내용
10 2023.02.28(화) 3 스프링 이해를 위한 자바 고급 -2 - 컴퍼지션 실습
- 햄버거 세트 만들기 

CH10 스프링 이해를 위한 자바 고급 - 2


1. 오버라이딩


package ex01;

class 지구인{
    String name = "지구인";
}
class 아시아인 extends 지구인{
    String name = "아시아인";
}
class 아프리카인 extends 지구인{
    String name = "아프리카인";
}
class 일본인 extends 아시아인{
    String name = "일본인";
}
class 한국인 extends 아시아인{
    String name = "한국인";
}
class 소말리아인 extends 아프리카인{
    String name = "소말리아인";
}

/**
 * 타입에 따라 변수를 찾아간다.
 * 상속을 통해 메모리 구조를 디자인할 수 있다.
 */
public class MemEx01 {
    public static void main(String[] args) {
        한국인 n1 = new 한국인(); // (한국인) - 아시아인 - 지구인
        System.out.println("타입 한국인 : " +n1.name);

        지구인 n2 = new 한국인(); // 한국인 - 아시아인 - (지구인)
        System.out.println("타입 지구인 : " +n2.name);

        지구인 n3 = new 소말리아인(); // 소말리아인 - 아프리카인 - (지구인)
        System.out.println("타입 지구인 : " +n3.name);
    }
}
class 아시아인 extends 지구인{ // new 아시아인() -> 아시아인, 지구인
    String name = "아시아인";
}

아시아인은 한국인이 아니다. → 다형성 성립하지 못한다.

한국인이 아시아인인것은 맞지만 아시아인이 한국인인건 아니다.

Untitled

바라보고 있는 타입으로 뜰 것이다.

메서드는 좀 다른걸로 알고 있다. → 이후 오버라이딩에 대해 설명

package ex02;

/**
 * 지구인 : 걷는다 (행위 특징), 말한다 (행위 특징)
 * 아시아인 : 황색피부 (상태 특징)
 * 아프리카인 : 검정색피부 (상태 특징)
 * 일본인 (Object) : 일본어로 말한다 (행위 특징)
 * 한국인 (Object) : 한국어로 말한다 (행위 특징)
 * 소말리아인 (Object) : 소말리어어로 말한다 (행위 특징)
 */

class 지구인 {
    public void walk() {
        System.out.println("걷는다");
    }

    public void speak() {
        // ? 어떻게 말하는지 구체적인 것은 모르겠어!
    }
}

class 아시아인 extends 지구인 {
    String skin = "황색피부";
}

class 아프리카인 extends 지구인 {
    String skin = "검정색피부";
}

class 일본인 extends 아시아인 {
    public void speak() {
        System.out.println("일본어로 말한다");
    }
}

class 한국인 extends 아시아인 {
    public void speak() {
        System.out.println("한국어로 말한다");
    }
}

class 소말리아인 extends 아프리카인 {
    public void speak() {
        System.out.println("소말리아어로 말한다");
    }
}

/**
 * 타입에 따라 변수를 찾아간다.
 * 상속을 통해 메모리 구조를 디자인할 수 있다.
 */
public class MemEx02 {

/*    public static void start() {
        한국인 obj = new 한국인(); // (한국인) - 아시아인 - 지구인
        System.out.println(obj.skin);
        obj.walk();
        obj.speak();
    }*/

/*    public static void start(한국인 obj) {
        System.out.println(obj.skin);
        obj.walk();
        obj.speak();
    }*/

/*    public static void start(아시아인 obj) {
        System.out.println(obj.skin);
        obj.walk();
        obj.speak(); // 동적바인딩
    }*/

    public static void start(지구인 obj) {
        //System.out.println(obj.skin); // 안됨!!
        obj.walk();
        obj.speak(); // 동적바인딩
    }

    public static void main(String[] args) {
        // step1

/*        한국인 obj = new 한국인(); // (한국인) - 아시아인 - 지구인
        System.out.println(obj.skin);
        obj.walk();
        obj.speak();*/

        // step2
        /*start();*/

        // step3
        /*start(new 한국인());*/

        // step4
        /*start(new 일본인());*/

        // step5
        start(new 소말리아인());
    }
}