자바 공부/[ 完 ] 자바 실전 - 기본편

9-2 상속과 메서드 오버라이딩

잘데친갈비 2024. 3. 14. 18:10

상속과 메서드 오버라이딩

  • 부모 타입의 기능을 자식에서 다르게 재정의 하고 싶을 때 메서드 오버라이딩을 사용해 재정의 할 수 있다.

메서드 오버라이딩

→ 사용 방법 🔽

package extends1.overriding;

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

    // 추가
    public void openDoor() {
        System.out.println("문을 엽니다.");
    }
}
// 부모 class

→ 부모 class 를 상속 받아 move 메서드를 재정의 🔽

package extends1.overriding;

public class ElectricCar extends Car {
    @Override // <- 오버라이딩 했다는 표시 필수
    public void move() {
        System.out.println("전기차를 빠르게 이동합니다");
    }
    
    public void charge() {
        System.out.println("충전 합니다.");
    }
}
// 자식 class

→ 이런 식으로 자식 class 에서 재정의 하여 사용 가능하다.

메서드 오버라이딩시 구조

→ 자식class 에서 부모 class 의 기능을 overriding 하면 다음과 같은 구조를 갖는다.🔽

→ ElectricCar 객체를 생성시켜보면 🔽

ElectritcCar electricCar = new ElectricCar();
electricCar.move();

→ 다음과 같은 객체 메모리 영역에 부모 class 와 자식 class 구역이 생성 되고 move() 메서드도 동일 하게 생성 된다.🔽

→ 자식 class 를 호출 했기 때문에 자식 move() 메서드를 먼저 탐색하고 존재 한다면 자식의 기능을 사용하고 부모 타입은 찾지 않는다.

추가 - 오버로딩, 오버라이딩의 차이

  • 오버로딩 : 메서드의 이름은 갖지만 매개변수의 타입, 개수에 따라 다른 기능을 호출 하여 사용 하는 것을 오버로딩 이라고 한다.
  • 오버라이딩 : 자식 class 가 부모 class 의 기능을 재정의 하여 자식의 기능으로 덮어 씌우는 것을 말한다.

메서드 오버라이딩 조건

  • 메서드 이름이 동일
  • 메서드 의 파라미터 타입, 순서, 개수가 동일
  • 반환 타입이 동일
  • 상위 메서드 보다 하위 메서드보다 더 제한되면 안된다. ex) 상위 [ protected ] , 하위 [ public, protected ] O 상위 [ protected ] , 하위 [ private , default ] X
  • static, final, private 가 붙은 메서드는 오버라이딩 될 수 없다.
  • 생성자는 오버라이딩 할 수 없다.