오버라이딩이란?
부모 클래스에 정의된 메서드를 자식 클래스에서 ‘다시 정의(재정의)’하는 것을 말합니다.
자식 클래스가 부모 클래스의 메서드를 그대로 사용하는 것이 아니라, 자기 상황에 맞게 메서드의 내용(기능)을 바꿔서 사용할 수 있게 해주는 기능입니다.
오버라이딩의 필요성
상속을 통해 부모의 기능을 물려받았지만, 자식 클래스 입장에서는 동작 방식이 다를 때 오버라이딩을 사용합니다.
예를 들어,
- Animal이라는 클래스의 sound() 메서드는 “동물이 소리를 냅니다.”라고 되어 있습니다.
- Dog 클래스는 "멍멍!"으로 출력하고 싶습니다.
- Cat 클래스는 "냐옹!"으로 출력하고 싶습니다.
➡ 각 클래스에서 sound()를 오버라이딩하면 됩니다!
* Animal 클래스 - 부모 클래스
public class Animal {
public void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
* Dog 클래스 - 자식 클래스 (오버라이딩)
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
* Cat 클래스 - 자식 클래스 (오버라이딩)
public class Cat extends Animal {
@Override
public void sound() {
System.out.println("냐옹!");
}
}
* 실행 클래스
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
Cat cat = new Cat();
animal.sound();
dog.sound();
cat.sound();
}
}
- 출력 결과 -
동물이 소리를 냅니다.
멍멍!
냐옹!
👉 부모의 sound()가 있었지만, 자식이 동작 방식을 바꿔서 덮어쓴 것입니다!
오버라이딩은 객체지향 프로그래밍의 핵심 개념 중 하나인 다형성을 구현하는 핵심 수단입니다.
✅ 하나의 메서드가 클래스마다 다른 방식으로 동작하게 만들어줍니다.
💡 다형성이란?
➡ 같은 이름의 메서드가 객체에 따라 다르게 동작하는 성질입니다. 해당 내용은 추후에 자세히 배울 예정입니다!
@Override 어노테이션
@Override
public void sound() {
...
}
- @Override는 오버라이딩을 명확하게 표시해 주는 주석입니다.
- 실수로 메서드 이름이나 매개변수를 잘못 쓰면 컴파일 에러가 발생해서 실수를 줄일 수 있습니다.
👉 가급적 모든 오버라이딩 메서드에 붙여주는 습관을 들이는게 좋습니다!
오버라이딩의 조건
조건 | 설명 |
메서드 이름 동일 | 부모와 자식 메서드 이름이 같아야 함 |
매개변수(파라미터) 동일 | 매개변수 개수와 타입이 같아야 함 |
반환 타입 동일 | 반환 타입도 동일해야 함 |
접근 제어자 | 부모보다 좁은 범위 불가 ( public ➡ private ❌ ) |
읽어주셔서 감사합니다 😊
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 21. super란? (super vs this vs this()) (0) | 2025.04.14 |
---|---|
[Java] 20. 오버라이딩과 오버로딩 차이 (0) | 2025.04.09 |
[Java] 18. 상속이란? (1) | 2025.04.09 |
[Java] 17. this vs this() (0) | 2025.04.08 |
[Java] 16. 생성자와 오버로딩 (0) | 2025.04.08 |