메소드 오버로딩은 한 클래스 내에 이름은 같지만 매개변수 type이나 개수가 다른 여러개의 메소드를 중복작성 할 수 있는 것으로, 자바 다형성의 한 경우 입니다.
(생성자 여러개 작성하는 것과 비슷)
이때, 메소드의 리턴type이 다르다고 해서 이름, 매개변수의 개수나 type이 같은 메소드가 다른 메소드가 되지 않습니다.
리턴type은 메소드를 구분하는 기준이 될 수 없습니다.
public class MethodOverloadingFailEx {
public int getSum(int a, int b) {
return a + b;
}
public double getSum(int a, int b) {
return (double)(a + b);
}
}
위 두개의 getSum()메소드는 리턴type은 다르지만 매개변수 개수와 타입이 모두 같으므로, 이 두 메소드는 호출자의 입장에서 구분이 불가능합니다.
따라서 자바 컴파일러는 오류를 발생시킵니다.
public class MethodSample {
static int getSum(int a, int b) {
return a + b;
}
static int getSum(int a, int b, int c) {
return a + b + c;
}
static double getSum (double a, double b) {
return a + b;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MethodSample a = new MethodSample();
int i = a.getSum(1, 2);
int j = a.getSum(1, 2, 3);
double k = a.getSum(1.2, 1.3);
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
위 코드의 3개의 메소드 getSum()은 이름은 같지만 서로 매개변수의 개수나 type이 다르므로, 호출자 입장에서 구분이 가능하기 때문에 오버로딩이 성공적으로 이루어 집니다.