페이지

2015. 1. 9.

[JAVA] Day5.메서드 오버로딩(Method Overloading)

4.1 메서드 오버로딩(Method Overloading)


메서드 오버로딩이란?

하나의 클래스의 동일한 이름의 메서드를 여러 개 정의하는 것.
예를 들어 System.out.println 메서드에서
다양하게 오버로딩된 메서드를 제공함으로써 모든 변수를 출력할 수 있도록 설계






4.2 오버로딩의 조건

 - 메서드의 이름이 같아야 한다.
 - 매개변수의 개수 또는 타입이 달라야 한다.
 - 매개변수는 같고 리턴타임이 다른 경우는 오버로딩이 성립되지 않는다.
 - 리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

잘못된 예

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 b, 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(long a, long b){return a+b;}
//매개변수의 타입이 다르므로 오버로딩이 성립한다.



class OverloadingTest {
    public static void main(String args[]) {
        MyMath3 mm = new MyMath3();
        System.out.println("결과:" + mm.add(3,3));
        System.out.println("결과: " + mm.add(3L,3));
        int[] a = {100, 200, 300};
        System.out.println("mm.add(a) 결과: " + mm.add(a));
   }}
class MyMath3 {
    int add(int a, int b) {
        return a+b;
    }
    long add(long b,int a) {
        return a+b;
    }
    int add(int[] a) {       
        int result = 0;
        for(int i=0; i < a.length;i++) {
            result += a[i];
        }   
        return result;
    }
}