자바에서 메서드를 재정의하거나 중복 정의할 수 있는 기능은 객체지향의 핵심인 다형성(Polymorphism)을 잘 보여준다.
부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하여 사용하는 것
extends)protected → public 가능)@Override 애너테이션을 붙여주면 컴파일 타임에 체크 가능class Animal {
void sound() {
System.out.println("동물이 소리를 낸다.");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!");
}
}
같은 이름의 메서드를 매개변수 타입/개수/순서만 다르게 하여 여러 개 정의하는 것
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
int sum(int a) {...}
double sum(int a) {...} // ❌ 오버로딩 아님 → 컴파일 에러
오버라이딩은 상속을 활용한 다형성 구현,
오버로딩은 편의성을 위한 다양한 메서드 제공이다.
| 항목 | 오버라이딩 (Overriding) | 오버로딩 (Overloading) |
|---|---|---|
| 의미 | 부모 클래스의 메서드를 자식이 재정의 | 하나의 클래스에 같은 이름의 메서드를 중복 정의 |
| 필요 조건 | 상속 관계 필요 | 상속 관계 없어도 됨 |
| 매개변수 | 동일해야 함 | 달라야 함 (타입/개수/순서 중 하나 이상) |
| 반환형 | 반드시 동일 | 반환형만 다른 것은 오버로딩이 아님 |
| 실행 시점 | 런타임(실행 시) | 컴파일 타임(컴파일 시) |
| 대표 예시 | toString(), equals() 재정의 | System.out.println() 다양한 타입 출력 등 |