package ex_overloading;
public class Ex1 {
public static void main(String[] args) {
/*
* 메서드 오버로딩(매개변수 갯수 또는 순서가 다른 메서드)
* - 매개변수의 타입이 같더라도 갯수가 다르면 오버로딩이 성립된다!
* => 단, 타입이 같은 매개변수간의 순서 변경은 오버로딩이 아님!
*
*/
OverloadingMethod om = new OverloadingMethod();
om.print(10, 20);
om.print(10, 20, 30);
// om.print(10, 20, 30, 40); // 오류 발생!
// => 반드시 호출하려는 메서드의 매개변수 갯수 및 타입이 일치해야함
System.out.println("=========================");
om.sum(1, 3.14);
om.sum(3.14, 1);
om.sum(1, 2);
}
}
class OverloadingMethod {
// 매개변수 갯수가 다른 메서드 오버로딩
// 정수 2개를 전달받은 print() 메서드 정의
public void print(int n1, int n2) {
System.out.println(n1 + ", " + n2);
}
// 정수 3개를 전달받는 print() 메서드 정의
public void print(int n1, int n2, int n3) {
System.out.println(n1 + ", " + n2 + ", " + n3);
}
// -----------------------------------------
// 정수 1개와 실수 1개를 전달받는 sum() 메서드 정의
public void sum(int num1, double num2) {
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
}
public void sum(double num1, int num2) {
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
}
public void sum(int num1, int num2) {
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
}
// 같은 데이터타입끼리의 순서는 바꿀수 없다! = 오버로딩 성립 X
// public void sum(int num2, int num1) {
//
// System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
//
// }
}
연습
package ex_overloading;
public class Test1 {
public static void main(String[] args) {
/*
* 간단한 계산기(Calculator 클래스)
* - calc() 메서드 오버로딩
* => 연산자(char opr) 1개와 정수 2 ~ 4개(int num1 ~ num4)를 전달받아
* 해당 연산자에 맞는 연산 결과를 출력하는 메서드 오버로딩
*/
Calculator c = new Calculator();
c.calc('+', 10, 20); // 10 + 20 = 30 출력
c.calc('-', 100, 10); // 100 - 10 = 90 출력
c.calc('*', 10, 20); // 10 * 20 = 200 출력
c.calc('/', 100, 2); // 100 / 2 = 50 출력
c.calc('+', 10, 20, 30); // 10 + 20 + 30 = 60 출력
c.calc('-', 100, 10, 20); // 100 - 10 - 20 = 70 출력
c.calc('*', 10, 20, 30); // 10 * 20 * 30 = 6000 출력
c.calc('/', 100, 2, 5); // 100 / 2 / 5 = 10 출력
c.calc('+', 10, 20, 30, 40); // 10 + 20 + 30 + 40 = 100 출력
c.calc('-', 100, 10, 20, 30); // 100 - 10 - 20 - 30 = 40 출력
c.calc('*', 10, 20, 30, 40); // 10 * 20 * 30 * 40 = 240000 출력
c.calc('/', 100, 2, 5, 2); // 100 / 2 / 5 / 2 = 5 출력
}
}
class Calculator {
public void calc(char opr, int num1, int num2) {
int result = 0; // 연산의 결과를 저장할 변수
switch (opr) {
case '+' :
result = num1 + num2; break;
case '-' :
result = num1 - num2; break;
case '*' :
result = num1 * num2; break;
case '/' :
result = num1 / num2; break;
}
System.out.println(num1 + " " + opr + " " + num2 + " = " + result);
}
public void calc(char opr, int num1, int num2, int num3) {
int result = 0; // 연산의 결과를 저장할 변수
switch (opr) {
case '+' :
result = num1 + num2 + num3; break;
case '-' :
result = num1 - num2 - num3; break;
case '*' :
result = num1 * num2 * num3; break;
case '/' :
result = num1 / num2 / num3; break;
}
System.out.println(num1 + " " + opr + " " + num2 + " " + opr + " " + num3 + " = " + result);
}
public void calc(char opr, int num1, int num2, int num3, int num4) {
int result = 0; // 연산의 결과를 저장할 변수
if (opr == '+') {
result = num1 + num2 + num3 + num4;
} else if (opr == '-') {
result = num1 - num2 - num3 - num4;
} else if (opr == '*') {
result = num1 * num2 * num3 * num4;
} else if (opr == '/') {
result = num1 / num2 / num3 / num4;
}
// System.out.println(num1 + " " + opr + " " +
// num2 + " " + opr + " " + num3 + " " + opr + " " + num4 + " = " + result);
System.out.printf("%3d %c %3d %c %3d %c %3d = %d\n", num1, opr, num2, opr, num3, opr, num4, result);
}
}