다형성 활용 예제
다음은 물건을 구입하는 사람을 정의한 Buyer클래스이다. 이 클래스는 멤버변수로 돈(money)과 장바구니(cart)를 가지고 있다. 제품을 구입하는 기능의 buy메서드와 장바구니에 구입한 물건을 추가하는 add메서드, 구입한 물건의 목록과 사용금액, 그리고 남은 금액을 출력하는 summary메서드를 완성하시오.
1.
메서드명 : buy
기능 : 지정된 물건을 구입한다. 가진 돈(money)에서 물건의 가격을 빼고, 장바구니(cart)에 담는다.
만일 가진 돈이 물건의 가격보다 적다면 바로 종료한다.반환타입 : 없음매개변수 : Product p - 구입할 물건
2.
메서드명 : add기능 : 지정된 물건을 장바구니에 담는다.만일 장바구니에 담을 공간이 없으면, 장바구니의 크기를 2배로 늘린 다음에 담는다.
반환타입 : 없음매개변수 : Product p - 구입할 물건
3.
메서드명 : summary기능 : 구입한 물건의 목록과 사용금액, 남은 금액을 출력한다.
반환타입 : 없음매개변수 : 없음
import javax.sound.midi.Soundbank;
import java.sql.SQLOutput;
class HW0929 {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.buy(new Tv());
b.buy(new Audio());
b.buy(new Computer());
b.buy(new Computer());
b.buy(new Computer());
b.summary();
}
}
class Buyer {
int money = 1000;
Product[] cart = new Product[3]; // 구입한 제품을 저장하기 위한 배열
int index = 0; // Product배열 cart에 사용될 index
void buy(Product p) {
// 가진 돈과 물건의 가격을 비교해서 가진 돈이 적으면 메서드를 종료한다
// 충분 할 경우, 가진 돈에서 빼고, ADD method를 호출하여 장바구니에 구입한 물건을 담는다
int price = p.price;
if (money < price){
System.out.println("보유한 돈으로 " + p.toString() + "를 구매하실 수 없습니다" );
} else {
money -= price;
add(p);
}
}
void add(Product p) {
int cartLength = cart.length;
// i의 값이 장바구니의 크기와 같으면 기존의 장바구니 보다 2배 큰 새로운 배열을 생성한다
if (index == cartLength) {
Product[] temp = new Product[cartLength];
for (int i = 0; i < cartLength; i++) {
temp[i] = cart[i];
}
cart = new Product[cartLength * 2];
// 새존의 장바구니에 기존의 장바구니를 복사한다
for (int i = 0; i < cartLength; i++) {
cart[i] = temp[i];
}
}
// 물건을 장바구니에 저장하고, ㅑ의 값을 1 증가시킨다
cart[index] = p;
index++;
}
void summary() {
int total = 0;
//장바구니에 담긴 물건들의 목록을 만들어 출력한고 가격을 모두 더한다
System.out.println("구매한 물건들: ");
for (int i = 0; i < index; i++) {
System.out.print(cart[i].toString() + " ");
total += cart[i].price;
}
System.out.println("");
// 물건을 사고 남은 금액 를 출력한다(money).
System.out.println("사용 금액: " + total);
System.out.println("남은 금액: " + money);
}
}
class Product {
int price;
Product(int price) {
this.price = price;
}
}
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 Audio extends Product {
Audio() {
super(50);
}
public String toString() {
return "Audio";
}
}
Java
복사