B 클래스가 A 클래스를 상속받는 관계, 즉 B extends A 에서 B 클래스는 (A 클래스를) 상속받는 클래스, A 클래스는 (B 클래스가) 상속하는 클래스라고 표현한다.
상속받는 자식(서브) 클래스는 상속하는 부모(슈퍼) 클래스의 메서드를 재정의 할 수 있다. 이를 오버라이딩(Overriding)이라고 한다.
이러한 오버라이딩에는 제한 조건이 붙는다.
1. 메소드 이름이 같아야 한다.
2. 자식 클래스의 접근 제어자는 부모 클래스 메서드의 접근제어자의 범위와 같거나 넓어야 한다.
예시) A 클래스의 exam 메소드 접근 제어자가 protected라면 이를 오버라이딩하는 B 클래스의 exam 메소드는 protected, public만 가능하다. private, defalut는 불가능하다.
3. 반환타입이 같아야 한다.
4. 메소드 파라미터(매개변수)의 개수, 타입, 순서가 같아야 한다. 매개변수명은 달라도 괜찮다.
5. 예외(설명 추가 예정)
오버라이딩 규약 조건을 지키지 않은 경우 컴파일 오류를 내고 싶다면 @Override 을 붙여주어야한다.
public class OnlineLecture {
public void play(int lectureCode) {
System.out.println("강의 재생");
}
}
예시로, OnlineLecture class를 상속 받는 MegaStudy class를 만들고, 잘못된 메서드 오버라이딩을 시도해보았다.
위와 같이 @Override 애노테이션을 붙여주면 정상적으로 컴파일 에러를 발생시키는 것을 확인할 수 있다.
반대로 @Override 애노테이션을 붙여주지 않으면, 잘못된 메서드 오버라이딩임에도 컴파일 에러는 찾아볼 수 없다.
이렇게 되면 런타임 시점에 해당 오류가 발견되므로, 꼭 @Override를 붙여주자.
오버로딩(Overloading)
오버로딩을 한국말로 표현하자면 '과적'이라고 한다고 한다. 메소드를 '과적'한다고 이해하면 된다. 같은 메소드 이름을 가지고, 메소드 파라미터 개수를 다르게 하여 메소드를 여러 개 정의하는 것을 오버로딩이라고 부른다.
오버라이딩(Overring)
오버라이딩은 '재정의'라는 뜻을 가진다.정해진 약속을 지킨다면 상속하는 부모 클래스의 메서드를 다시 작성할 수 있다.
'JAVA' 카테고리의 다른 글
Collection framwork의 정렬 메소드 탐구 (0) | 2024.02.24 |
---|---|
Optional (0) | 2023.08.03 |
abstract class (0) | 2023.07.10 |