JAVA_37_다형성의 장점2

charl hi·2021년 8월 19일
0

JAVA

목록 보기
37/53

2. 여러 종류의 객체를 배열로 다루기

  • 조상타입의 배열에 자손들의 객체를 담을 수 있다.
  • ✨✨하나의 조상타입배열에 여러 자손타입의 객체를 저장
  • 원래는 하나의 타입만 저장할 수 있었지...
Product[] p = new Product[3];	//Product p[]도 된다!
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 Tv22 extends Product2 {
	Tv22() {
		super(800);
	}
	public String toString() {
		return "Tv";
	}
}

class Computer2 extends Product2 {
	Computer2() {
		super(300);
	}
	public String toString() {
		return "Computer";
	}
}

class Audio2 extends Product2 {
	Audio2() {
		super(100);
	}
	public String toString() {
		return "Audio";
	}
}

class Buyer2 {
	int money = 1000;
	int bonusPoint = 0;
	
	Product2[] cart = new Product2[10];	//여기에 cart를 만드네?
	int i = 0;
	
	void buy(Product2 p) {
		if (money < p.price) {
			System.out.println("잔액이 부족하여 "+p+"을/를 구입할 수 없습니다.");
			return;
		}
		money -= p.price;
		bonusPoint += p.bonusPoint;
		cart[i++] = p;	
		//구입한 제품의 주소를 Product2타입의 참조변수 배열 cart[i]에 저장
		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]+", ";
			//cart[i].toString()
		}
		System.out.println("구입하신 물품의 총금액은 "+sum+"입니다.");
		System.out.println("구입하신 물품은 "+itemList+"입니다.");
	}
}


public class Ex7_09 {

	public static void main(String[] args) {
		Buyer2 b = new Buyer2();
		b.buy(new Tv22());
		b.buy(new Computer2());
		b.buy(new Audio2());
		
		b.summary();
		//이렇게 호출!! 
		System.out.println("현재 잔액은 "+b.money+"입니다.");
		System.out.println("현재 보너스점수는 "+b.bonusPoint+"입니다.");

	}

}

Tv을/를 구입하셨습니다.
잔액이 부족하여 Computer을/를 구입할 수 없습니다.
Audio을/를 구입하셨습니다.
구입하신 물품의 총금액은 900입니다.
구입하신 물품은 Tv, Audio, 입니다.
현재 잔액은 100입니다.
현재 보너스점수는 90입니다.

어우 힘들다


-> 업그레이드!

Ch07Re2
Ex7_09

class Product22{
	int price;
	int bonusPoint;
	
	public Product22(int price) {	//매개생성자
		super();	//생성자 첫줄에 생성자 호출이 없으면 자동으로 추가
		this.price = price;
		bonusPoint = (int) (price / 10.0);
	}
}

class Tv22 extends Product22{
	public Tv22(int price) {	//매개생성자
		super(price);	//생성자 첫줄에 생성자 호출
	}
	public String toString() { return "Tv";}
}

class Computer22 extends Product22{
	public Computer22(int price) {	//매개생성자
		super(price);	//생성자 첫줄에 생성자 호출
	}
	public String toString() { return "Computer";}
}

class Buyer22{
	int money;
	int bonusPoint;
//	Product22[] cart = new Product22[10];;	//**장바구니, 포함관계
	Product22[] cart;
	
	public Buyer22(int money) {
		this.money = money;
		bonusPoint = 0;
		cart = new Product22[10];;
		System.out.println("현재 소지금액은 "+money+"원입니다.");
		System.out.println("현재 보너스점수는 "+bonusPoint+"점입니다.");
	}
	int i=0;
	void buy(Product22 p) {
		if(money<p.price) {
			System.out.println("금액이 부족하여 "+p+"을/를 구입할 수 없습니다.");
			return;	//***
		}
		money -= p.price;
		bonusPoint += p.bonusPoint;
		System.out.println(p+"을/를 구입하셨습니다.");
		cart[i++] = p;	//*******
	}
	
	void summary() {
		int sum = 0;	//합계****
		String itemList = "";	//구매목록****
		System.out.print("구입하신 제품은 ");
		if(cart[0] == null) {
			System.out.println("없습니다.");
		} else {
			for(int i=0; i<=cart.length; i++) {
				if(cart[i]==null) break;	//*****
				sum += cart[i].price;
				itemList += cart[i]+", ";	//****
			}
            System.out.println(itemList+"입니다.");
		}
		System.out.println("총 지출은 "+sum+"원입니다.");
		System.out.println("잔액은 "+money+"원입니다.");
		System.out.println("보너스점수는 "+bonusPoint+"점입니다.");
	}
}

public class Ex7_09 {

	public static void main(String[] args) {
		Buyer22 b = new Buyer22(1000);
		b.buy(new Tv22(1200));
		b.buy(new Computer22(400));
		b.buy(new Tv22(500));
		b.summary();

	}

}

현재 소지금액은 1000원입니다.
현재 보너스점수는 0점입니다.
금액이 부족하여 Tv을/를 구입할 수 없습니다.
Computer을/를 구입하셨습니다.
Tv을/를 구입하셨습니다.
구입하신 제품은 Computer, Tv, 입니다.
총 지출은 900원입니다.
잔액은 100원입니다.
보너스점수는 90점입니다.

못살 때

현재 소지금액은 1000원입니다.
현재 보너스점수는 0점입니다.
금액이 부족하여 Tv을/를 구입할 수 없습니다.
구입하신 제품은 없습니다.
총 지출은 0원입니다.
잔액은 1000원입니다.
보너스점수는 0점입니다.


-> 업그레이드!! ArrayList

Ch07Re2
Ex7_09_2

import java.util.ArrayList;

class Product33{
	int price;
	int bonusPoint;
	
	public Product33(int price) {	//매개생성자
		super();	//생성자 첫줄에 생성자 호출이 없으면 자동으로 추가
		this.price = price;
		bonusPoint = (int) (price / 10.0);
	}
}

class Tv33 extends Product33{
	public Tv33(int price) {	//매개생성자
		super(price);	//생성자 첫줄에 생성자 호출
	}
	public String toString() { return "Tv";}
}

class Computer33 extends Product33{
	public Computer33(int price) {	//매개생성자
		super(price);	//생성자 첫줄에 생성자 호출
	}
	public String toString() { return "Computer";}
}

class Buyer33{
	int money;
	int bonusPoint;
//	Product22[] cart = new Product22[10];;	//**장바구니, 포함관계
	ArrayList<Product33> list = new ArrayList<Product33>();
//	Product33[] cart;
	
	public Buyer33(int money) {
		this.money = money;
		bonusPoint = 0;
//		cart = new Product33[10];;
		System.out.println("현재 소지금액은 "+money+"원입니다.");
		System.out.println("현재 보너스점수는 "+bonusPoint+"점입니다.");
	}
	int i=0;
	void buy(Product33 p) {
		if(money<p.price) {
			System.out.println("금액이 부족하여 "+p+"을/를 구입할 수 없습니다.");
			return;	//***
		}
		money -= p.price;
		bonusPoint += p.bonusPoint;
		System.out.println(p+"을/를 구입하셨습니다.");
		list.add(p);	//********
	}
	
	void summary() {
		int sum = 0;	//합계****
		System.out.print("구입하신 제품은 ");
		if(list.isEmpty()) {
			System.out.println("없습니다.");
		} else {
			for(int i=0; i<list.size(); i++)
				sum += list.get(i).price;
			System.out.println(list+" 입니다.");
		}
		System.out.println("총 지출은 "+sum+"원입니다.");
		System.out.println("잔액은 "+money+"원입니다.");
		System.out.println("보너스점수는 "+bonusPoint+"점입니다.");
	}
}




public class EX7_09_2 {

	public static void main(String[] args) {
		Buyer33 b = new Buyer33(1000);
		b.buy(new Tv33(1200));
		b.buy(new Computer33(400));
		b.buy(new Tv33(500));
		b.summary();

	}

}

현재 소지금액은 1000원입니다.
현재 보너스점수는 0점입니다.
금액이 부족하여 Tv을/를 구입할 수 없습니다.
Computer을/를 구입하셨습니다.
Tv을/를 구입하셨습니다.
구입하신 제품은 [Computer, Tv] 입니다.
총 지출은 900원입니다.
잔액은 100원입니다.
보너스점수는 90점입니다.

못살 때

현재 소지금액은 1000원입니다.
현재 보너스점수는 0점입니다.
금액이 부족하여 Tv을/를 구입할 수 없습니다.
구입하신 제품은 없습니다.
총 지출은 0원입니다.
잔액은 1000원입니다.
보너스점수는 0점입니다.



Ref

0개의 댓글

관련 채용 정보