하나의 클래스에 동일한 이름의 메소드를 여러 개 정의하는 것
*overload : 과적(過積)하다
오버로딩이 성립하기 위한 조건 ?
- 메소드의 이름이 같다
- 매개변수의 개수 or 타입이 다르다
※ 반환 타입은 영향이 없다 !int add(int a, int b) { return a+b; } long add(int x, int y) { return long(x+y); } 위의 두 메소드는 반환 타입이 다르지만 매개변수 개수와 매개변수 타입이 동일하므로 오버로딩이 성립하지 않는다. ∴ 컴파일시 에러 발생 ➡️ The method add(int x, int y) is already defined.
❔오버로딩의 올바른 예
매개변수는 다르지만 같은 의미의 기능을 수행하게 되는 경우 !
case 1>
int add(int a, int b) { return a+b; }
long add(long a, int b) { return a+b; }
case 2>
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
위와 같은 경우 모두 메소드 오버로딩이 성립한다(매개변수 타입이 다르므로).
그러나, 예를 들어
add(5, 5);
위와 같이 작성하여 호출한 경우 case 1의 경우에는 문제 없이 실행되는 반면 case 2에선 에러가 발생한다.
➡️ The method add(int, long) is ambiguous for the type ~ .
한마디로 무엇을 호출한 건지 모호하다고 에러를 던지는 것이다.
이와 같은 에러를 발생시키지 않기 위해서는 명확히 작성해 주어야 한다
add(5, 5L);
add(5L, 5); 등