메소드 이름은 같지만, 매개변수가 다른 메소드
장점 : 하나의 이름으로 정의할 수 있다면 기억하기도 쉽다
public class MyClass {
public int plus(int x, int y) {
return x + y;
}
public int plus(int x, int y, int z) {
return x + y + z;
}
public String plus(String x, String y) {
return x + y;
}
}
int add(int a, long b) { }
int add(long a, int b) { }
- 메소드의 이름이 같아야 한다.
- 매개변수의 개수나 매개변수의 타입 중 하나가 달라야 한다
- 메서드의 리턴타입은 보지 말자 “왜?” 리턴타입은 오버로딩에 영향을 끼치지 못한다
(위 예제의 리턴타입은 int)
쉽게 생각하면, 오버로딩은 다양한 개성을 불어넣는 것이다.
다양한 매개변수를 통해 개성을 준다.
하지만 “메소드의 이름”은 같아야 한다!
int divide(int x, int y) { }
double divide(int boo, int aoo) { }
매개 변수의 타입과 개수, 순서가 똑같을 경우
매개 변수 이름이 다르다고 해서! 이것은
오버로딩이라고 하지 않는다.
또한 리턴 타입만 다르고! 매개 변수가 동일하다면
이것도 메소드 오버로딩이라고 하지 않는다
추가 설명)
int add(int a, int b) { return a+b; }
int add(int x, int y) { return x+y; }
// 두 메서드의 매개변수 이름이 다르지만 매개 변수 타입이
// 같아서 메소드 오버로딩이라고 할 수 없다
int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long)(a+b); }
// 매개변수는 같지만, 리턴타입이 다르다 하더라도 메소드 오버로딩이라고 할 수 없다.
int add(int a, long b) { return a+b; }
int add(long a, int b) { return a+b; }
// 매개변수 개수와 타입이 같지만, 순서가 다르게 되어 있어서 메소드 오버로딩이라고 한다.
// 결국!! 신경써야 할 부분은 매개변수 타입과 매개변수 개수가 달라야 한다.
메서드 오버로딩 찾기 문제)
**보기) long add( int a, int b) { return a+b;}**
1.long add( int x, int y) { return x+y;}
2.long add( long a, long b) { return a+b;}
3.int add( byte a, byte b) { return a+b;}
4.int add( long a, int b) { return (int)(a+b);}
정답은 2,3,4 이다. 리턴타입은 보지 말자. 어차피 영향을 못준다
매개변수 타입과 매개변수 개수가 다른지만 보자
메소드 오버로딩 ex)
Reference
제로베이스 - https://zero-base.co.kr/category_dev_camp/java_challenge