오버로딩
한 클래스 안에 같은 이름의 메서드 여러개 정의하는 것
대표적인 예 println()
println()
println(int x) println(34);
println(String x) println("hello");
println(boolean x)
println(long x)
오버로딩 성립조건
1.메서드 이름이 같아야 한다
2.매개변수의 개수 또는 타입이 달라야한다.
3.반환타입은 상관없다(영향없다)
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);했을때 둘중에 뭐 부른지 모름
add(3L,3) 또는 add(3,3L) 이런식으로 정확히 불러줘야함
public class Oop12_overloading {
public static void main(String[] args) {
MyMath3 mm =new MyMath3();
//The method add(long, int) is ambiguous for the type MyMath3
//만약에 int add(int a,int b)없는데 add(3,3)부르면 모호하다고 에러난다.
System.out.println(mm.add(3,3));
System.out.println(mm.add(3L,3));
System.out.println(mm.add(3,3L));
System.out.println(mm.add(3L,3L));
}
}
class MyMath3{
//오버로딩의 올바른 예
//매개변수는 다르지만 같은 의미의 기능수행(같은 작업을 수행)
int add(int a,int b) {
System.out.println("int add(int a,int b)-");
return a+b;
}
long add(long a,int b) {
System.out.println("int add(long a,int b)-");
return a+b;
}
long add(int a,long b) {
System.out.println("int add(int a,long b)-");
return a+b;
}
long add(long a,long b) {
System.out.println("long add(long a,long b)-");
return a+b;
}
}