코드 그라데이션

Day22. 상속 도입.(21은 문제) 본문

Java/Mega

Day22. 상속 도입.(21은 문제)

완벽한 장면 2023. 4. 17. 18:45

상속

- 일반적으로, 부모가 자식에게 물려주는 것.

- 자식 입장에서는 부모 것을 가져오는 것.

 

통념상 부모가 자식보다 범위가 크다고 여기고 있지만, 

그렇기는 하죠...

 

자바에서는 자식이 사이즈가 더 크다!!!

 

상속을 왜 쓰죠?

- 코드 재사용성이 좋아집니다.

- 부모의 것을 받아 쓰고 + 내것 을 추가 할 수 있습니다.(확장)

(상속의 움직이는 단위는 무조건 class) : 일단 현재까지는.

 

매우 단순한 기본 형태

Class A{ // 부모
}

Class B extends A{ // A클래스 자식
}

 

상속의 특징

1. 클래스를 체계화 할 수 있다.

2. 확장이 가능하다.

3. 기존 클래스의 기능을 쉽게 변경할 수 있다 => 오버라이딩

 

상속과 관련한 자바 언어의 특징

* 다중상속을 지원하지 않는다.

* 자바는, 상속 하나 반드시 포함된다.(대왕. Object 클래스)

 

그림 예시 1.

 

다중상속은 아니된다.

 

이해를 돕기 위한 예제

=> 라면 다양하게 끓이기

--> 라면을 가지고 바리에이션을 줘서 다양한 형태로 끓일 수 있음.

package mega.backend_onemore.Day22;

import java.util.Scanner;

class Ramayon{
  String ramyon = "라면";
  String water = "물";
  String onion = "파";

  void boilwater() {
    System.out.println(water+"을 끓인다.");
  }

  void cooking() {
    System.out.println(ramyon+"과"+onion+"를 넣고 끓여 요리 완성 맛있게 드세요!!!");
  }
}

class RiceRamyon extends Ramayon{
  String rice = "떡";
  void topping() {
    System.out.println(rice+"를 넣는다.");
  }
}
class CheeseRamyon extends Ramayon{
  String cheese = "치즈";
  void topping() {
    System.out.println(cheese+"를 넣는다.");
  }
}


public class ExtendsTest {

  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    while(true) {
      System.out.print("만들고 싶은 요리를 입력하세요(1.일반라면, 2.떡라면, 3.치즈라면, 99.종료) :");
      int s = sc.nextInt();
      if(s == 1) {
        Ramayon r = new Ramayon();
        r.boilwater();
        r.cooking();
      }
      else if(s == 2) {
        RiceRamyon r = new RiceRamyon();
        r.boilwater();
        r.topping();
        r.cooking();
      }
      else if(s == 3) {
        CheeseRamyon cr = new CheeseRamyon();
        cr.boilwater();
        cr.topping();
        cr.cooking();
      }
      else if(s == 99) {
        System.out.println("감사합니다.");
        break;
      }
      else {
        System.out.println("주문을 다시 하시길 바랍니다.");
      }
    }
  }
}

 

 

예제 2.

상속받으면, 부모의 생성자가 먼저 호출이 돼요!

class C{
  C(){
    System.out.println("C생성");
  }
}
class D extends C{
  D(){
    System.out.println("D생성");
  }
}
public class InheritanceTest {
  public static void main(String[] args) {

    D d = new D();
  }

}

 

 

is - A 관계

=> 상속 관계를 의미

부모 < 자식

(물려받아서 확장을 시키니까, 이 관계에서는 당연히 자식의 사이즈가 더 크다.

 

ex. 

1. 사람 - 포유류

: "사람은 포유류다" => 가능 (사이즈의 크기가 명확, 포함관계도 명확)

 

2.엔진 - 자동차 - 

: "엔진은 자동차다" => 불가능(단순히 포함되어 있을 뿐, 모든 엔진이 자동차라고 보기에는 무리가 있음)

 

Has-A 관계 그림

 

 

------------------------------------------------------

 

Is - A 관계 그림

 

 

728x90

'Java > Mega' 카테고리의 다른 글

Day24. 참조자료형 형변환, 오버라이딩  (0) 2023.04.17
Day23. super  (1) 2023.04.17
Day20. 오버로딩과 접근제한자  (1) 2023.04.17
클래스배열 초기화(생성자에서) 예시  (0) 2023.04.09
Day16. HasTest 보충  (0) 2023.04.09
Comments