충분히 쌓여가는
오버로딩 overloading 본문
오버로딩
한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것
대표적인 예: 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
'Java > 객체지향' 카테고리의 다른 글
생성자 this()와 참조변수 this (0) | 2023.06.01 |
---|---|
생성자 Constructor (0) | 2023.06.01 |
class 메서드(static 메서드)와 instance 메서드 (0) | 2023.05.30 |
기본형 매개변수와 참조형 매개변수 (0) | 2023.05.26 |
return 문 (void => return 문 생략 가능) (0) | 2023.05.25 |