반응형
오버로딩(overloading)
한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것
오버로딩이 성립하기 위한 조건
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); }
// 오버로딩이 안된다.
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
// 오버로딩이 된다.
세 번째 코드에서 입력 값 add(3,3);를 해줬을 때 1번과 2번에도 전부 해당이 되기 때문에 오류가 난다.
add(3,3L); 이나 add(3L,3);이 올바른 표현이다. (Ambiguous 모호한이라고 표현)
연산자 오버로딩(내가 만지거나 수정하거나 못함 그래서 오버로딩을 메서드 오버로딩이라고 안하고 오버로딩이라고 표현)
java
+ : 1. 부호, 2. 덧셈, 3. 문자열 결합
class Ex6_10 {
public static void main(String args[]) {
MyMath3 mm = new MyMath3();
System.out.println("mm.add(3, 3) 결과:" + mm.add(3,3));
System.out.println("mm.add(3L, 3) 결과: " + mm.add(3L,3));
System.out.println("mm.add(3, 3L) 결과: " + mm.add(3,3L));
System.out.println("mm.add(3L, 3L) 결과: " + mm.add(3L,3L));
int[] a = {100, 200, 300};
System.out.println("mm.add(a) 결과: " + mm.add(a));
}
}
class MyMath3 {
int add(int a, int b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(int a, long b) {
System.out.print("long add(int a, long b) - ");
return a+b;
}
long add(long a, int b) {
System.out.print("long add(long 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.print("int add(int[] a) - ");
int result = 0;
for(int i=0; i < a.length;i++)
result += a[i];
return result;
}
}
반응형
'java↗' 카테고리의 다른 글
java 변수(타입),형변환 (0) | 2024.04.12 |
---|---|
java↗7-15. 생성자(constructor) (0) | 2024.03.28 |
java↗7-13. static 메서드와 인스턴스 메서드 (0) | 2024.03.27 |
java↗7-12. 기본형 매개변수, 참조형 매개변수 (0) | 2024.03.27 |
java↗7-11. 호출스택(call stack) (0) | 2024.03.27 |