6.3 메서드 오버로딩
3.1 메서드 오버로딩(method overloading)이란?
하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩, 간단히 오버로딩이라고 한다.
3.2 오버로딩의 조건
- 메서드의 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다. (개수가 다르든지 타입이 다르든지)
- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립하지 않음. (즉, 리턴타입은 오버로딩 구현에 아무런 영향을 주지 못한다는 의미이다.)
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; }
// 메서드 중복정의
int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long)(a+b); }
// 반환 타입은 영향이 없기 때문에 이것도 중복정의 오버로딩이다.
오버로딩인 경우
int add(int a, long b) { return a+b; }
int add(long a, int b) { return a+b; }
#개수는 같지만 타입이 다름
#add(3,3)를 쓸 경우 컴퓨터는 어떤 것을 써야할지 모른다. (둘 다 가능하기 때문) --> ambiguous
오버로딩인 경우 (2)
class MyMath3 {
int add(int a, int b){
System.out.print("int add(int a, int b) - ");
return a+b
long add(long a, long b){
System.out.print("int add(long a, long b) - ");
return a+b
}
int add(int[] a){
System.out.print("int add(int[] a) - ")
int resul = 0;
for(int i=0;i<a.length;i++)
result += a[i];
return result;
}
}
#메서드는 동작을 표현하는 것이기 때문에 대부분 동사로 표현하는 것.
# 이름이 같다는 것은 하는 작업이 같다는 뜻.
'Java > 객체지향' 카테고리의 다른 글
자바의 정석 제 6장 정리 (0) | 2021.11.04 |
---|---|
[객체지향][자바의 정석] - 5. 변수의 초기화 멤버변수의 초기화 (0) | 2021.11.02 |
[객체지향][자바의 정석] - 6.4 생성자 (0) | 2021.11.01 |
[객체지향][자바의 정석] - 2. 변수와 메서드 (0) | 2021.10.13 |
[객체지향][자바의 정석] - 1. 클래스와 객체 (0) | 2021.10.11 |