메서드 오버로딩

Mia Lee·2021년 11월 24일
0

JAVA

목록 보기
49/98
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);
		
	}
	
}

























0개의 댓글