package ex_overloading;
public class Ex1 {
public static void main(String[] args) {
/*
* 메서드 오버로딩(Method Overloading)
*
*/
NormalMethod nm = new NormalMethod();
nm.abs(-10);
nm.dAbs(-3.3);
nm.lAbs(-30L);
System.out.println("====================================");
OverloadingMethod om = new OverloadingMethod();
om.abs(-10); // public void abs(int num) {} 메서드가 호출!
om.abs(-3.3); // public void abs(double num) {} 메서드가 호출!
om.abs(-30L); // public void abs(long num) {} 메서드가 호출!
// => 즉, 메서드 파라미터 전달 시, 매개변수를 구분할 수 있으면
// 메서드 오버로딩이 성립되는 것으로 간주하고 오류 발생 없음!
}
}
class OverloadingMethod {
// 정수 1개를 전달받아 절대값을 계산하여 출력하는 abs() 메서드 정의
// => int, double, long 타입에 대한 각 메서드를 abs() 이름으로 통일
// 단, 매개변수 타입만 int, double, long으로 구분
public void abs(int num) {
// 전달받은 정수 num이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if (num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
// 매개변수의 타입이 같고, 변수명만 다른 것은 오버로딩이 아니다!
// public void abs(int num2) {} // 컴파일 에러 발생!
// 매개변수가 같고, 리턴타입만 다른 것은 오버로딩이 아니다!
// public int abs(int num) {} // 컴파일 에러 발생!
// int형이 아닌 다른 타입 매개변수를 선언하면 오버로딩이 성립됨!
public void abs(double num) {
if (num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
public void abs(long num) {
if (num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
} // OverloadingMethod 클래스 끝
class NormalMethod {
// 정수 1개를 전달받아 절대값을 계산하여 출력하는 abs() 메서드 정의
public void abs(int num) {
// 전달받은 정수 num이 음수일 경우 양수로 변환 후 출력
// 아니면 그대로 출력
if (num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
// double 타입 실수를 전달받는 메서드를 별도로 정의
// => 메서드명도 식별자이므로 중복되면 안된다!
public void dAbs(double num) {
// 전달받은 num의 값이 음수일 경우 양수로 변환 후 출력
if (num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
// long 타입 정수를 전달받는 메서드 별도 정의
public void lAbs(long num) {
if (num < 0) {
num = -num;
}
System.out.println("num = " + num);
}
}
연습
package ex_overloading;
public class Test1 {
public static void main(String[] args) {
PlusClass pc = new PlusClass();
pc.plus(10, 20); // 10 + 20 = 30 출력
pc.plus(1.5, 1.5); // 1.5 + 1.5 = 3.0 출력
pc.plus(10, 1.5); // public void plus(double num1, double num2)
// => int, double 전달 시 double, double 변경되어서 메서드가 호출!
}
}
/*
* PlusClass 클래스 정의
* 정수 또는 실수 2개를 전달받아 덧셈 결과를 출력하는 클래스
* 메서드명은 plus() => 메서드 오버로딩 적용
*
*/
class PlusClass {
public void plus(int num1, int num2) {
int result = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + result);
}
public void plus(double num1, double num2) {
double result = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + result);
}
}