상속 - 시작

  • 공통되는 것을 묶어 부모를 만들고 그 하위에 공통 사항을 각각사용하며 다른 기능을 만드는 것을 제공 하기 위해 상속을 사용한다.

상속 관계

  • 상속은 객체 지향 프로그래밍의 핵심 요소 중 하나로 기존 클래스의 필드와 메서드를 새로운 클래스에 재사용하게 해준다.
  • 이름 그대로 기존 클래스의 모든것을 그대로 물려받는 것이다.
  • 사용하는 방법은 extend 키워드를 사용하면 된다.
  • 자식 클래스는 부모클래스를 하나만 상속 받을 수 있다.

상속 관계

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

상속 사용

  1. 자동차 속성을 갖는 부모 클래스 🔽
package extends1.ex2;

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

  1. 부모 클래스로부터 상속 받는 전기차 클래스 🔽
package extends1.ex2;

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

  1. 부모 클래스로부터 상속 받는 가솔린차 클래스 🔽
package extends1.ex2;

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

  1. 전기 차 가스 차 의 기능을 구현하는 클래스
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();
    }
}

→ 전기 차 와 가스 차 에 move 메소드가 없지만 상속받으면 마치 자식의 메소드인것 처럼 사용 가능해진다.


상속과 메모리 구조

→ 다음과 같은 상속 구조도를 갖은 class 를 보자🔽

ElectricCar electricCar = new ElectricCar();

→ ElectritcCar 의 객체를 생성할때의 메모리 구조 상황을 보면 🔽

  • 객체를 생성 할 때에 상속 받은 부모의 기능도 ElectricCar 의 참조 값 안에 생성하게 된다.
  • 외부에서 볼때 하나의 인스턴스를 생성 하는거 같지만 내부에는 부모와 자식이 모두 생성 되고 공간이 구분 된다.
  • 실제로는 참조 값 안에 Car(부모), ElectricCar(자식) 이라는 두 가지 클래스 정보가 공존하게 된다.

→ 그럼 ElectricCar.charge() 를 호출 한 상황에서는

  • 본인의 타입에서 찾아보고 해당 기능이나 변수가 존재하면 바로 사용.

→ ElectircCar.move() 인 부모 기능을 호출

  • 우선 본인의 타입에 존재하는지 찾아보고 없으면 부모타입에서 찾아 기능을 꺼내 사용한다.
  • 상속 결론
    • 상속 받은 객체를 생성하면 그 내부에는 부모와 자식이 모두 생성 된다.
    • 상속 관계의 객체를 호출 할 때, 대상 타입을 정하고 이때 호출자의 타입을 통해 찾는다.
    • 현재 타입에서 기능을 찾지 못하면 상위 부모 타입의 기능을 찾아서 실행 한다.

'자바 공부 > [ 完 ] 자바 실전 - 기본편' 카테고리의 다른 글

9-3 상속과 접근제어  (0) 2024.03.14
9-2 상속과 메서드 오버라이딩  (0) 2024.03.14
8-1. final  (0) 2024.03.12
7-4 static 메서드  (0) 2024.03.09
7-3 static 변수  (0) 2024.03.09

+ Recent posts