✅ 상속


상속은 객체 지향 프로그래밍의 핵심 요소 중 하나로, 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다. 이름 그대로 기존 클래스의 속성과 기능을 그대로 물려받은 것이다.
상속을 사용하려면 extends 키워드를 사용하면 된다. 그리고 extends 대상은 하나만 선택할 수 있다.



📚 용어 정리

  • 부모 클래스 (슈퍼 클래스) : 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스
  • 자식 클래스 (서브 클래스) : 부모 클래스로부터 필드와 메서드를 상속받는 클래스



✏️ ex2.Car

package extends1.ex2;

public class Car {

  public void move() {
    System.out.println("차를 이동합니다.");
  }
}

Car는 부모 클래스가 된다. 여기에는 자동차의 공통 기능인 move()가 포함되어 있다.



✏️ ex2.ElectricCar

package extends1.ex2;

public class ElectricCar extends Car{

  public void charge() {
    System.out.println("충전합니다.");
  }
}

전기차는 extends Car를 사용해서 부모 클래스인 Car를 상속받는다. 상속 덕분에 ElectricCar에서도 move()를 사용할 수 있다.



✏️ ex2.GasCar

package extends1.ex2;

public class GasCar extends Car {

  public void fillUp() {
    System.out.println("기름을 주유합니다.");
  }
}

가솔린차도 전기차와 마찬가지로 extends Car를 사용해서 부모 클래스인 Car를 상속받는다. 상속 덕분에 여기서도 move()를 사용할 수 있다.



✏️ ex2.CarMain

package extends1.ex2;

public class CarMain {

  public static void main(String[] args) {
    ElectricCar electricCar = new ElectricCar();
    electricCar.move();
    electricCar.charge();

    GasCar gasCar = new GasCar();
    gasCar.move();
    gasCar.fillUp();
  }
}



🖥️ 실행 결과



⚙️ 상속 구조

전기차와 가솔린차가 Car를 상속 받은 덕분에 electricCar.move(), gasCar.move()를 사용할 수 있다.


✓ 참고
상속은 부모의 기능을 자식이 물려 받는 것이다. 따라서 자식이 부모의 기능을 물려 받아서 사용할 수 있다. 반대로 부모 클래스는 자식 클래스에 접근할 수 없다. 자식 클래스는 부모 클래스의 기능을 물려 받기 때문에 접근할 수 있지만, 그 반대는 아니다.
부모 코드를 보면 자식에 대한 정보가 하나도 없지만 자식 코드는 extends Car를 통해서 부모를 알고 있다.



💡 단일 상속

자바는 다중 상속을 지원하지 않는다. 그래서 extend 대상은 하나만 선택할 수 있다. 부모를 하나만 선택 할 수 있다는 뜻이다. 물론 부모가 또 다른 부모를 하나 가지는 것은 괜찮다.



❓ 다중 상속을 지원한다면

만약 비행기와 자동차를 상속 받아서 하늘을 나는 자동차를 만든다고 가정해보자. 만약 그림과 같이 다중 상속을 사용하게 되면 AirplaneCar 입장에서 move()를 호출할 때 어떤 부모의 move()를 사용해야 할 지 애매한 문제가 발생한다. 이것을 다이아몬드 문제라 한다.
그리고 다중 상속을 사용하면 클래스 계층 구조가 매우 복잡해질 수 있다. 이런 문제점 때문에 자바는 클래스의 다중 상속을 허용하지 않는다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글