여러 종류의 객체를 배열로 다루기
- 조상타입의 배열에 자손들의 객체를 담을 수 있다.
Product p1 = new Tv();
Product p2 = new Computer();
Product p3 = new Audio();
Product p[] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
다형성의 장점
- 다형적 매개변수
- 하나의 배열에 여러 종류의 객체 저장 가능 (원래 배열은 같은 타입만 저장이 가능한데 다형성을 이용하여 여러 종류의 객체 저장이 가능!)
class Product2 {
int price;
int bonusPoint;
Product2 (int price) {
this.price = price;
bonusPoint = (int) (price / 10.0);
}
}
class Tv2 extends Product2 {
Tv2() {
super(100);
}
public String toString() {
return "Tv"; }
}
class Computer2 extends Product2 {
Computer2() {
super(200); }
public String toString() {
return "Computer"; }
}
class Buyer2 {
int money = 1000;
int bonusPoint = 0;
Product2[] cart = new Product2[10];
int i = 0;
void buy(Product2 p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price;
bonusPoint +=p.bonusPoint;
cart[i++] = p;
System.out.println(p + "을/를 구입하셨습니다.");
}
void summary() {
int sum = 0;
String itemList = "";
for (int i = 0; i < cart.length; i++) {
if(cart[i] == null) break;
sum += cart[i].price;
itemList += cart[i] + ", ";
}
System.out.println("구입하신 물품의 총금액은" + sum + "만원입니다. ");
System.out.println("구입하신 제품의" + itemList + "입니다.");
}
}
class Ex {
public static void main(String[] args) {
Buyer2 b = new Buyer2();
b.buy(new Tv2());
b.buy(new Computer2());
b.summary();
System.out.println("현재 남은 돈은" + b.money + "만원입니다.");
System.out.println("현재 보너스점수는" + b.bonusPoint + "점입니다.");
}
}