자바에서 같은 이름의 메서드를 여러개 정의하는 것을 오버로딩 (Overloading) 이라고 함
즉, 이름이 같고 매개변수가 다른 메서드를 여러 개 정의하는 것을 의미
1-1. 메서드 시그니처 (Method Signature)
메서드를 구분할 수 있는 식별자
메서드 이름, 매개변수 타입, 매개변수 순서 등으로 이루어짐
메서드 시그니쳐 = 메서드 이름 + 매개변수 타입과 순서
1-2. 오버로딩 규칙
오버로딩 규칙 : "메서드 시그니처가 달라야 한다."
1-3. 오버로딩 예시
메서드의 이름이 같고, 매개변수의 개수가 달라야 한다.
// 매개변수의 개수가 다른 경우publicclassMain{
publicstaticvoidmain(String[] args){
System.out.println("두 수의 합 = " + sum(1,2));
System.out.println("세 수의 합 = " + sum(1,2,3));
}
publicstaticintsum(int a, int b){
return a+b;
}
publicstaticintsum(int a, int b, int c){
return a+b+c;
}
}
메서드의 이름이 같고, 매개변수의 타입이나 순서가 달라야 한다.
// 매개변수의 타입이 다른 경우publicclassMain{
publicstaticvoidmain(String[] args){
System.out.println("정수 2개의 합 = " + sum(1,2));
System.out.println("실수 2개의 합 = " + sum(1.0,2.5));
}
publicstaticintsum(int a, int b){
return a+b;
}
publicstaticdoublesum(double a, double b){
return a+b;
}
}
// 매개변수의 타입 순서가 다른 경우publicclassMain{
publicstaticvoidmain(String[] args){
System.out.println("정수와 실수의 합 = " + sum(1,2.1));
System.out.println("실수와 정수의 합 = " + sum(1.5,2));
}
publicstaticdoublesum(int a, double b){
return a+b;
}
publicstaticdoublesum(double a, int b){
return a+b;
}
}
1-4. 오버로딩 실패
메서드 시그니처 : 메서드의 반환 타입은 포함하지 X
따라서 메서드 반환 타입만 다른 경우는 오버로딩 실패!
메서드의 반환 타입만 다른 경우
// 오버로딩에 실패하여 에러가 발생한다.publicstaticdoublesum(int a, int b){
return a+b;
}
publicstaticintsum(int a, int b){
return a+b;
}
2. 메서드 오버라이딩 (Method Overriding)
상속받은 부모 클래스의 메서드를 자식 클래스에서 동일한 메서드 시그니처로 재정의 하는 것을 의미
2-0. @Override
옵션임, 없어도 잘 동작함
상위 클래스의 메서드를 오버라이드 했음을 의미 하는 애노테이션
컴파일러가 이 애노테이션을 보고 정확히 오버라이드 되었는지 검사함 ⇒ 잘못되면 컴파일 에러
오버라이딩 시 실수하는 경우를 방지해줌!
// 컴파일 에러// java: method does not override or implement a method from a supertype