class Customer {
int money = 11000;
void buyCoffee(Coffee coffee) { // 매개변수의 다형성
if (money < coffee.price) { // 물건 가격보다 돈이 없는 경우
System.out.println("잔액이 부족합니다.");
return; //잔액이부족할시 멈춰줌 else 써도되긴함
}
money = money - coffee.price; // 가진 돈 - 커피 가격
System.out.println(coffee + "를 구입했습니다.");
}
}
class Coffee {
int price;
public Coffee(int price) {
this.price = price;
}
}
class Americano extends Coffee {
public Americano() {
super(4000); // 상위 클래스 Coffee의 생성자를 호출
}
public String toString() {
return "아메리카노";
} //Object클래스 toString()메서드 오버라이딩
}
class CaffeLatte extends Coffee {
public CaffeLatte() {
super(5000);
}
public String toString() {
return "카페라떼";
}
}
public static void main(String[] args) {
Customer customer = new Customer();
customer.buyCoffee(new Americano());
customer.buyCoffee(new CaffeLatte());
System.out.println("현재 남은 잔액은" + customer.money + "입니다");
}
아메리카노를 구입했습니다.
카페라떼를 구입했습니다.
현재 남은 잔액은2000입니다
다형성의 특징에 따라 개별적인 커피의 타입이아니라 상위 클래스인 Coffee의 타입을 매개변수로 받으면 그 하위 클래스의 참조변수이면 어떤 것이든 매개변수로 전달 될 수 있다 그래서 매번 다른 타입의 참조변수를 매개변수로 전달 안해도 된다.