다형성
- 자식 클래스의 타입을 가지고 부모 참조 변수 객체를 선언할 수 있는 것
Product p = new Computer();
Computer c = new Product();
다형성의 장점
- 다형적 매개변수
- 하나의 배열로 여러 종류의 객체 다룰 수 있음
package acorn;
import java.util.*;
class Product {
int price;
int bonusPoint;
Product (int price) {
this.price = price;
bonusPoint = (int)(price / 10.0);
}
}
class Tv extends Product {
Tv () {
super(100);
}
public String toString() {
return "Tv";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
Vector item = new Vector();
void buy(Product p) {
if (money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
item.add(p);
System.out.println(p + "을/를 구입하셨습니다.");
}
void refund(Product p) {
if (item.remove(p)) {
money += p.price;
bonusPoint -= p.bonusPoint;
System.out.println(p + "을/를 반품하셧씁니다.");
} else {
System.out.println("구입하신 제품 중 해당 제품이 없습니다.");
}
}
void summary() {
int sum = 0;
String itemList = "";
if (item.isEmpty()) {
System.out.println("구입하신 제품이 없습니다.");
return;
}
for (int i = 0; i < item.size(); i++) {
Product p = (Product)item.get(i);
sum += p.price;
itemList += (i==0) ? "" + p : ", " + p;
}
System.out.println("구입하신 물품의 퐁금액은 " + sum + "만원입니다.");
System.out.println("구입하신 제품은 " + itemList + "입니다.");
}
}
public class test {
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.summary();
}
}