- 오버라이딩이란 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것.

 

[ 오버라이딩 조건 ]

 - 자식 클래스에서는 오버라이딩하려는 메소드의 이름. 매개변수, 리턴 값이 모두 같야야 한다.

 

[ 예제 코드 ]

public class Override {
  public static void main(String[] args) {
    Person person = new Person();
    Child child = new Child();
    Senior senior = new Senior();
  
    person.smile();
    child.smile();
    senior.smile();
  }
}

class Person {
  void smile() {
    System.out.println("행복하다. 헤헤");
  }
}

class Child extends Person {
  @Override
  protected void smile() {
    System.out.println("행복해요.");
  }
}

class Senior extends Person {
  @Override
  public void smile() {
    System.out.println("행복하구려.");
  }
}

 - 위 예시 코드를 실행해 보면 다음과 같은 결과를 볼 수 있다.

더보기

행복하다. 헤헤

행복해요.

행복하구려.


[ @Override ]

 - 해당 어노테이션(Annotation)은 오버라이딩을 검증하는 기능을 하게된다.

 ※ 어노테이션(Annotation)이란? 직역으로 '주석'이라고 한다. 그러나 일반적인 주석과는 다르게 검증하는 기능을 하게된다.

 

[ 오버라이딩에서의 접근 제어자 설정 규칙 ]

 1. 자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정 할 수없다.

    - 위 예제에서 부모클래스의 접근제어자는 default로 설정되어있다.

    - 이 경우, 자식 클래스는 default와 같거나 더 넓은 범위의 접근제어자만 설정이 가능하다.

    - 그러므로, 위 예제에서는 default, protected, public 접근제어자를 사용할 수 있다.

 2. 예외(Exception)는 부모 클래스의 메소드보다 많이 선언할 수 없다.

    - 부모 클래스에서 예외를 throws 하면, 자식 클래스에서 그 예외보다 더 큰 범위의 예외를 throws할 수 없다.

 3. static 메소드를 인스턴스의 메소드로 또는 그 반대로 바꿀 수 없다. 

    - 부모 클래스의 static메소드를 자식에서 같은 이름으로 정의할 수 있지만 이것은 다시 정의하는 것이 아니라 같은 이름의 static메소드를 새로 정의하는 것이다.

 

 

'#Java' 카테고리의 다른 글

Java 클래스(Class)  (0) 2024.04.03
오버로딩(Overloding) vs 오버라이딩(Overriding)  (0) 2024.04.03
메소드의 오버로딩 (Method Overloading)  (0) 2024.04.03
메소드(Method)  (0) 2024.04.02
String Pool이란 무엇인가?  (0) 2024.04.02

+ Recent posts