[자바] 김영한의 실전자바 - 기본편 정리(3)

곽동현·2024년 3월 31일
0

[ 섹션 9 : 상속 ]

상속의 필요성

다음은 전기차주유차 2종류의 차를 생성하여 사용하는 단적인 예시이다.

전기차

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

주유차

public class GasCar {
 public void move() {
 	System.out.println("차를 이동합니다.");
 }
 public void fillUp() {
 	System.out.println("기름을 주유합니다.");
 }
}
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 라는 추상적인 개념 에서 구체화 된 2종류의 차 종류이다. 해당 차들은 move() 라는 공통성을 갖게 됨으로, 공통적인 특성을 묶기 위해선 상속이 제격이다!

상속 예시

//화살표 방향                ->  : 화살표의 의미는 "내가 너를 안다."로 생각하면 좋다.
public class ElectricCar extends Car{

    public void charge(){
        System.out.println("충전합니다.");
    }
}
//화살표 방향                
public class GasCar extends Car {

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

📌상속 메모리 구조! (아주 중요)

  1. 상속을 받는 인스턴스를 생성하면, 부모 클래스까지 한꺼번에 불러서 생성한다.
  2. 메서드를 호출할 때, 메서드를 찾는 기준은 호출한 변수의 타입명을 보고 찾는다.
    2-1) 만일, 호출한 타입에 해당 메서드가 없으면? -> 부모 메서드로 찾아간다.
    2-2) 만일, 부모 메서드에도 해당 메서드가 없으면? -> 컴파일 오류 발생

1. 생성과정 : 상속한 부모클래스까지 생성

2. 메서드 호출 기준 : 호출한 변수의 타입명을 본다.

2-1) 만일, 호출한 타입에 해당 메서드가 없으면? -> 부모 메서드로 찾아간다.
2-2) 만일, 부모 메서드에도 해당 메서드가 없으면? -> 컴파일 오류 발생

상속과 접근 제어자 : protected

protected 의 사용이 여기서 나타난다 !

private : 동일 클래스 내 접근 허용
default : 동일 클래스 + 동일 패키지 내 접근 허용
protected : 동일 클래스 + 동일 패키지 + 타 패키지-상속 접근 허용
public : 모두 허용

📌상속 중요 규칙

규칙 : 상속 관계를 사용하면, 자식 클래스의 생성자에서 부모 클래스의 생성자를 반드시 호출해야 한다.

super - 부모 참조

동일한 필드명, 동일한 메서드가 오버라이딩 되어 있을 경우, super() 연산자를 통해서 부모 클래스에 대해 참조할 수 있다.

생성자 호출 순서

  1. B extends A
  2. C extends B 일 때,

A -> B -> C 순서로 생성된다.

profile
실패의 경험들을 채워나가기!

0개의 댓글