메소드 오버로딩에 대해서 헷갈렸던 부분이 있었는데 계속 기억하기 위해서 작성해게 되었다. 내가 헷갈렸던 부분은 리턴타입이 같아야 오버로딩이 가능한 줄만 알았는데, 리턴타입은 상관이 없던 것이였다.
메소드는 한 클래스 내에, 이름은 같지만 매개변수의 개수나, 타입이 다르면 여러개의 메소드를 중복해서 작성할 수 있다. 이것을 바로 오버로딩이라고 한다.
그렇다면 왜 메소드 오버로딩을 사용하는 것일까?
바로 자바의 다형성을 하기 위해서이다.
여러개의 메소드가 오버로딩 되려면 두 조건을 만족해야 한다.
다음은 오버로딩의 실패사례이다.
public class MerhodOverloading{
public int sum(int i, int j){
return i+j;
}
public double sum(int i, int j){
return (double)(i+j);
}
}
실패한 이유는 바로 타입이 다르지도 않고, 개수도 다르지 않기 때문이다!
그럼 성공한 사례도 함께 보도록 하자.
public class MethodOverloading{
public int sum(int i){
return i;
}
public double sum(int i, int j){
return (double)(i + j);
}
public int sum(double i){
return (int)i;
}
}
꼭 기억하도록 하자. 리턴 타입은 메소드를 구분하는 기준으로 사용하지 않는다는 것을!