하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것. 보통 하나의 메서드에 하나의 기능을 구현하는데, 같은 이름의 메서드로 여러 기능을 구현하기 때문에 '과적하다'라는 뜻의 "overload"를 사용한다.
public void overloadingEx() {
...
}
public void overloadingEx(String str) {
...
}
public void overloadingEx(String str, int num) {
...
}
오버로딩의 조건은 메서드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.
- 같은 기능을 하는 메서드를 하나의 이름으로 사용할 수 있다.
하나의 메서드로 여러 경우의 수를 해결할 수 있다는 것이다. 예로 흔히 콘솔창에 텍스트를 출력할 때 사용하는println()메서드는 인자 값으로 int, String, boolean 등 어떠한 타입의 매개변수들을 넣어도 문제가 없지만 그 내부에는 매개변수 타입에 따라 println 메서드가 달라진다.
오버라이딩은 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것을 의미한다. extends를 이용한다.
class Parent {
public void ex1() {
System.out.println("상위클래스");
}
}
class Child extends Parent {
public void ex1() {
System.out.println("하위클래스");
}
}
public class OverridingTest {
public static void main(String[] args) {
Parent a = new Parent();
Child b = new Child();
a.ex1();
b.ex1();
}
}
오버로딩과 오버라이딩은 단어가 유사해 혼동하기 쉽다.
- 오버로딩(Overloading)은 새로운 메서드를 추가하는 것
- 오버라이딩(Overriding)은 상속받은 메서드를 재정의하는 것