Ch6-30~31. overloading
0. 목차
Chapter6. 객체지향 프로그래밍Ⅰ
Ch6 - 30. 오버로딩(overloading)
Ch6 - 31. 오버로딩(overloading) 예제
Ch6 - 30. 오버로딩(overloading)
▶ 오버로딩(overloading)이란?
▷ 한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
▷ 일반적으로, 메서드 : 메서드 이름 = 1 : 1
▷ 오버로딩은, 메서드 : 메서드 이름 = n : 1
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)
오버로딩 지원 시, 매개변수를 통해 메서드를 알아 봄
▶ 오버로딩(overloading)이 성립하기 위한 조건
▷ 메서드 이름이 같아야 함
▷ 매개변수의 개수 또는 타입이 달라야 함
▷ 반환 타입은 영향 없음
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
▶ 오버로딩(overloading)이 아닌 경우
▷ 매개변수의 이름만 다른 경우
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); }
▷ ambiguous(모호한)
add(3, 3); // 두 개의 add 모두 반응, (3, 3L) → 첫번 째 add 반응
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
▶ 메서드 이름
▷ add, println, round, random : 대부분 동사 → 작업
▷ 메서드 이름이 같다 = 하는 작업이 같다
Ch6 - 31. 오버로딩(overloading) 예제
▶ 오버로딩의 올바른 예
▷ 매개변수는 다르지만 같은 의미의 기능 수행
class Hello {
public static void main(String[] args) {
Plus p = new Plus();
System.out.println("int a, int b = " + p.add(10, 10));
System.out.println("long a, int b = " + p.add(10, 10L));
System.out.println("int a, long b = " + p.add(10L, 10));
System.out.println("long a, long b = " + p.add(10L, 10L));
int[] a = {100, 200, 400};
System.out.println("int[] a = " + p.add(a));
}
}
class Plus {
long add(int a, int b) {
return a + b;
}
long add(long a, int b) {
return a + b;
}
long add(int a, long b) {
return a + b;
}
long add(long a, long b) {
return a + b;
}
int add(int[] a) {
int result = 0;
for(int i = 0; i < a.length; i++) {
result += a[i];
}
return result;
}
}
// console
int a, int b = 20
long a, int b = 20
int a, long b = 20
long a, long b = 20
int[] a = 700