클래스 내에 같은 이름의 메소드를 2개 이상 정의할 수 있게 해주는 기능


public class Calculator {
    int add(int a, int b) {
        return a + b;
    }

    int add(int a, int b, int c) {
        return a + b + c;
    }

    double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        Calculator c = new Calculator();

        System.out.println(c.add(2, 4));        // test 1
        System.out.println(c.add(2, 4, 8));     // test 2
        System.out.println(c.add(3.14, 2.54));  // test 3
    }
}
// 6
// 14
// 5.68

'달러'나 '유로'같은 다른 통화로 입금을 하는 depositWithExchangeRate 메소드를 아래처럼 쓸 수 있다.

public boolean deposit(int amount) {
    if (amount < 0 || amount > owner.getCashAmount()) {
        System.out.println("입금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
        return false;
    }

    balance += amount;
    owner.setCashAmount(owner.getCashAmount() - amount);

    System.out.println(amount + "원 입금하였습니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
    return true;
}

public boolean deposit(double amount, double exchangeRate) {
    return deposit((int) (amount * exchangeRate));
}

사실 print문도 메소드 오버로딩으로 되어있다.

System.out.println(5);        // 정수 파라미터
System.out.println(3.14);     // 소수 파라미터
System.out.println("hello");  // 문자열 파라미터
System.out.println(true);     // 불린 파라미터