기타 🎸

JAVA 오버라이딩(Overriding) 규칙과 예시

프라임콩 2025. 6. 11. 13:25

안녕하세요.

 

오버라이딩 규칙에 대해서 간략하게 작성해보겠습니다.

 

자바에서 오버라이딩이란?
상속받은 메서드를 자식 클래스에서 재정의하여 사용하는 것

 

 

메소드 오버라이딩의 규칙

  • 슈퍼 클래스의 메소드와 같은 이름으로 정의해야 합니다.
  • 같은 매개변수(타입과 개수)를 가져야 합니다.
  • 슈퍼 클래스 메소드의 접근 제어자보다 접근 범위가 같거나 더 넓어야 합니다.
    접근 제어자 범위는 private < default < protected < public 순으로 넓어집니다.
  • 슈퍼 클래스 메소드와 같은 리턴 타입을 가져야 합니다. ( Java 5까지는 완전히 같아야 했음. Java 5 이후에는 원본 리턴 타입의 하위 타입인 '공변 반환 타입(Covariant Return Type)'도 허용되지만 기본 자료형의 경우는 해당되지 않음 )

 

예시를 들어보겠습니다.

protected double compute(int x, int y)

 

위와 같은 메소드가 부모 클래스에 정의되어 있고, 이 메소드를 오버라이딩하기 위한 자식 클래스의 메소드는 다음 규칙을 따라야 합니다.

1. 메소드 이름: compute로 같아야 한다.
2. 매개변수: (int x, int y)로 타입과 개수가 같아야 한다.
3. 리턴 타입: double로 같아야 한다.
4. 접근 제어자: 부모의 protected보다 같거나 넓은 protected 또는 public이어야 한다.

 

 

그렇다면, 아래 재정의를 위한 메소드들은 적합한 형식일까요?? 아닐까요??

접은글을 펼치면 정답을 확인할 수 있습니다~ 😺

 

1. protected double compute(int x, int y)

더보기
더보기

 이름: compute (같음) - OK
 매개변수: (int x, int y) (타입, 개수 같음) - OK
 리턴 타입: double (같음) - OK
 접근 제어자: protected (부모와 같음) - OK


=> 결론: 오버라이딩에 적합합니다.

 

2. private double compute(int x, int y, int z)

더보기
더보기

◦ 이름: compute (같음) - OK
◦ 매개변수: (int x, int y, int z) (개수가 다름) - 불가능
◦ 리턴 타입: double (같음) - OK
◦ 접근 제어자: private (protected보다 좁음) - 불가능


=> 결론: 오버라이딩에 적합하지 않습니다. 매개변수 목록이 다르고 접근 제어자 범위가 좁습니다. 매개변수 목록이 다르므로 이는 오버라이딩이 아닌 오버로딩(Overloading)이 됩니다.

 

3. protected int compute(int x, int y)

더보기
더보기

◦ 이름: compute (같음) - OK
◦ 매개변수: (int x, int y) (타입, 개수 같음) - OK
◦ 리턴 타입: int (double과 다름) - 불가능
◦ 접근 제어자: protected (부모와 같음) - OK

 

=> 결론: 오버라이딩에 적합하지 않습니다. 리턴 타입이 다릅니다.

 

4. public double compute(int x, int y)

더보기
더보기

◦ 이름: compute (같음) - OK
◦ 매개변수: (int x, int y) (타입, 개수 같음) - OK
◦ 리턴 타입: double (같음) - OK
◦ 접근 제어자: public (protected보다 넓음) - OK


=> 결론: 오버라이딩에 적합합니다.

 


 

읽어주셔서 감사합니다.