한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
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)
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 영향없다.
int add(int a, int b) {return a + b;}
int add(int x, int y) {return x + y;}
이름만 바뀌고 타입이 똑같다 오버로딩 x
add(int, int) is already defined // 이미 정의되어 있다.
int add(int a, int b) {return a + b;}
long add(int a, int b) {return (long)(a + b);}
반환타입은 영향이 없으므로 오버로딩 X
add(int, int) is already defined // 이미 정의되어 있다.
long add(int a, long b) {return a + b;}
long add(long a, int b) {return a + b;}
오버로딩 O
단, long add(3, 3)으로 하면 에러가 나온다.(둘중 어느것인지 컴파일러가 판단을 못함)
예제
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.print("long add(long a, long b) - ");
return a+b;
}
int add(int[] a) {
System.out.pirnt("int add(int[] a) - ");
int result = 0;
for(int i=0; i < a.length;i++)
result += a[i];
return result;
}
}