- 오버라이딩이란 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것.
[ 오버라이딩 조건 ]
- 자식 클래스에서는 오버라이딩하려는 메소드의 이름. 매개변수, 리턴 값이 모두 같야야 한다.
[ 예제 코드 ]
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 |