JAVA 객지언 상속

Walter Mitty·2022년 5월 18일
0

JAVA

목록 보기
10/21

상속

car가 있다. 여기서 차에는 여러 종류가 있다. suv, 세단, 트럭, 스포트카 등등. 그러나 모두 차라는 특징은 똑같다. 바퀴 4개, 사람이나 짐을 태울 수 있고... 그래서 이거롤 오른쪽처럼 UML이라는 형식으로 표현해준다.
car라는게 있는데, 자동차에는 speed라는 속성이 있고, accelerate/break라는 기능/동작이 필요하다.
이것을 상속 받는 다는 것은 자동차가 가지는 특징과 동작은 그대로 가지고 거기서 추가적인 기능이 있다는 것이다.
예를들어 Sedan이 Car를 상속 받는다고 하면, Car의 특징과 동작 + Sedan의 Drivibg Mode(eco/sports), 그것을 세팅할 수 있는 setDriving Mode 라는 기능/동작이 추가되어있다.

  • 상속의 특징
  1. 부모 클래스에서 정의된 필드와 메소드를 물려 받는다.
  2. 새로운 필드와 메소드를 자식 클래스에 추가할 수 있다.
  3. 부모 클래스에서 물려받은 메소드를 수정할 수 있다.(overriding)
  • 상속의 형식
    • 상속은 extends를 이용해서 사용할 수 있다.
      class Animal{}
      class Dog extends Animal{}
      class Cat extends Animal{}
      Dog는 Animal을 extends라는 키워드를 통해서 상속받는다고 표현할 수 있다.
      Cat은 ecxtends Animal 이렇게 하면 이 Animal에 있는 그 속성들을 물려받을 수 있다.

Animal은 부모(조상) 클래스, Dog, Cat 클래스는 자식(자손) 클래스라고 부른다.

class Animal {
    String name;

    public void cry() {
        System.out.println(name + " is crying.");
    }
}

class Dog extends Animal {

    Dog(String name) {
        this.name = name;
    }

    public void swim() {
        System.out.println(name + " is swimming!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("코코");
        dog.cry();
        dog.swim();
        
        Animal dog2 = dog;
      //Animal dog2 = new Dog("미미")를 쓰면 이 Animal dof2라는 변수의 구현체 실제는 이 Dog로 생성한 객체야.
        dog2.cry();
//      dog2.swim(); // compile error가 뜬다.
// 왜냐하면 swim 함수는 dog2에 포함되어있지 않다.
// 실제 객체는 Dog지만, 실제 변수를 선언하는 type에는 Animal로 되어있어서 Animal에 있는 기능만 수행할 수 있다.
    }
}

출력하면,

코코 is crying
코코 is swimmming
코코 is crying

참고로 상속을 받을 때 여러 class를 상속 받을 수 없다. 오직 하나의 class만 상속받을 수 있다

overloading

하나의 class 내에서 동일한 이름의 method를 여러 개 갖는 것.

  • 조건

    • method 이름이 동일해야한다
    • 매개 변수의 개수나 혹은 type이 달라야 한다

    실패시 예제 1) return type은 문제가 되지 않는다.

overloading 가능 1)

overloading 가능 2)

overloading 가능 3)

overriding

부모의 class로 부터 상속받은 method, 그러니까 부모 class에 있는 method를 똑같이 자식 class에 정의하는 것이다. 그래서 부모에 있던 원래 함수의 내용은 없는 셈 덮어버리는 것!

코코 is barking

이 나온다.
즉 우리가 Animal에서 is crying 으로 찍어준 내용은 찾아 볼 수 없다. 즉 dog로 만들었을 때 부모 class에 있는 내용을 override한 함수의 경우에는 overriding 한 함수만 보여준다.

즉,
overloading의 경우는 기존에 없는 새로운 method를 정의하는데 같은 이름을 가지는 함수를 정의하는 것.

overrideing의 경우는 부모에 있는 함수를 자식 함수가 똑같이 구현해서 부모에 있는 함수를 없는 체 하는 것

1개의 댓글

comment-user-thumbnail
2022년 5월 18일

우와아.. 저는 다들 어려우실까 해서 돌아다니고 있는데 여기서 공부하고갑니다 .. 강의에서 막혀있던거
이해 제대로하고갑니다 ! 잘봤습니다 !

답글 달기