상속과 메서드 오버라이딩
부모 타입의 기능을 자식 클래스에서 다르게 정의하고 싶을 수 있다.
부모에게서 상속받은 기능을 자식이 재정의 하는 것을 메서드 오버라이딩(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 키워드가 붙은 메서드는 오버라이딩 할 수 없다.
- 생성자는 오버라이딩 할 수 없다.
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 기본] super - 부모 참조, 생성자 (0) | 2024.07.16 |
---|---|
[Java 기본] 상속과 접근 제어 (0) | 2024.07.16 |
[Java 기본] 상속과 기능 추가 (0) | 2024.07.15 |
[Java 기본] 상속과 메모리 구조 (0) | 2024.07.15 |
[Java 기본] 상속 (0) | 2024.07.15 |