Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

오버로딩 overloading 본문

Java/객체지향

오버로딩 overloading

빌드이너프 2023. 5. 30. 16:50

오버로딩

한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것

대표적인 예: println()

void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)

 

오버로딩이 성립하기 위한 조건

1. 메서드 이름이 같아야 한다

2. 매개변수의 개수 또는 타입이 달라야 한다

3. 반환 타입은 영향없다

 

오버로딩 아님

이름이 같지만 타입이 같다, 그냥 메서드 중복정의

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)}

 

오버로딩 성립

메서드 이름 같음, 개수는 2개로 같지만 타입이 다르다

하지만 여기에서 add(3, 3)을 호출하면 둘 다 가능하기 때문에 에러가 발생한다(ambiguous)

add(3, 3L)과 add(3L, 3)은 가능함

long add(int a, long b) {return a+b}
long add(long a, int b) {return a+b}

 

오버로딩 코드

public class OverloadingTest {
    public static void main(String[] args) {
        MyMath3 mm = new MyMath3();
        System.out.println(mm.add(3, 3)); // 6
        System.out.println(mm.add(3L, 3)); // 6
        System.out.println(mm.add(3, 3L)); // 6
        System.out.println(mm.add(3L, 3L)); // 6
        System.out.println();

        int[] a = {100, 200, 300};
        System.out.println(mm.add(a)); // 600
    }
}

class MyMath3 {
    int add(int a, int b) {
        System.out.println("int add(int a, int b)");
        return a+b;
    }

    long add(long a, long b) {
        System.out.println("long add(long a, long b)");
        return a+b;
    }

    int add(int[] a) {
        System.out.println("int add(int[] a)");
        int result = 0;
        for (int i = 0; i < a.length; i++) {
            result += a[i];
        }
        return result;
    }
}

int add(int a, int b)
6
long add(long a, long b)
6
long add(long a, long b)
6
long add(long a, long b)
6
int add(int[] a)
600