본문 바로가기

프로그래밍언어/Java

[Java 기본] 상속과 메서드 오버라이딩

상속과 메서드 오버라이딩


부모 타입의 기능을 자식 클래스에서 다르게 정의하고 싶을 수 있다. 

부모에게서 상속받은 기능을 자식이 재정의 하는 것을 메서드 오버라이딩(Overriding)이라 한다. 

 

예제


이전 포스팅의 예제 참고

2024.07.15 - [Java] - [Java 기본] 상속

 

[Java 기본] 상속

상속예제 ElectricCar.javapublic class ElectricCar { public void move() { System.out.println("차를 이동합니다. "); } public void charge() { System.out.println("충전합니다. "); }}  GasCar.javapublic class GasCar { public void move() { Syst

dev-baese.tistory.com

 

자동차의 Car.move() 기능을 사용하면 "차를 이동합니다. " 라고 출력한다. 이 때 전기차의 경우에는 "전기차를 빠르게 이동합니다. " 라고 출력하고 싶다. 

 

ElectricCar.java

 

public class ElectricCar extends Car{

    @Override
    public void move(){
        System.out.println("전기차를 빠르게 이동합니다. ");
    }

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

 

=> ElectricCar에서 부모의 move() 기능을 그대로 사용하지 않고, 재정의 해서 사용했다. 

 

@Override


@이 붙은 부분을 애노테이션이라 한다. 애노테이션은 프로그램이 읽을 수 있는 특별한 주석이라 생각하면 된다. 

  • 상위 클래스의 메서드를 오버라이드하는 것임을 나타냄
  • 컴파일러는 이 애토테이션을 보고 메서드가 정확히 오버라이드 되었는지 확인
  • 오버라이딩 조건을 만족시키지 않으면 컴파일 에러 발생

 

오버로딩(Overloading)과 오버라이딩(Overriding)


  • 메서드 오버로딩 : 메서드 이름이 같고 파라미터가 다른 메서드를 여러 개 정의하는 것을 메서 오버로딩(Overloading)이라 한다. 
  • 메서드 오버라이딩 : 하위 클래스에서 상위 클래스의 메서드를 재정의 하는 과정을 의미한다. 상속 관계에서 사용된다. 

 

메서드 오버라이딩 조건


  • 메서드 이름이 같아야 한다. 
  • 메서드 파라미터 타입 순서, 개수가 같아야 한다. 
  • 반환 타입이 같아야 한다. 
  • 접근 제어자는 상위 클래스의 메서드보다 더 제한적이어서는 안된다. 예를 들어 상위 클래스의 메서드가 protected로 선언되어 있으면 하위 클래스에서 private나 default로 오버라이드 할 수 없다.
  • static, final, private 키워드가 붙은 메서드는 오버라이딩 할 수 없다. 
  • 생성자는 오버라이딩 할 수 없다.  

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.