/ JAVAJUNGSUK

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