Java/JAVA의 정석_객체지향
다형성 - 하나의 배열에 여러종류의 객체 저장
Jenny_yoon
2022. 11. 2. 16:46
728x90
반응형
- 조상타입의 배열에 자손들의 객체를 담을 수 있다.
위를 아래와 같이 변경 (배열에 자손의 객체 담기)
ex. 예시
package ch7;
class Product2 {
int price; //제품의 가격
int bonusPoint; //제품 구매시 제공하는 보너스점수
Product2(int price) {
this.price = price;
bonusPoint = (int)(price/10.0); //보너스점수는 제품가격의 10%
}
}
class Tv2 extends Product2 {
Tv2() {
//조상클래스의 생성자 Product(int price)를 호출한다.
super(100); //Tv의 가격을 100만원으로 한다.
}
//Object클래스의 toString()을 오버라이딩 한다.
public String toString() { return "Tv"; }
}
class Computer2 extends Product2 {
Computer2() {super(200); } //컴퓨터 가격은 200만원.
public String toString() { return "Computer"; }
}
class Audio2 extends Product2 {
Audio2() { super(50); }
public String toString() { return "Audio"; }
}
class Buyer2 { //고객, 물건 사는 사람
int money = 1000; //소유금액;
int bonusPoint = 0; //보너스점수;
Product2[] cart = new Product2[10]; //구입한 제품을 저장하기 위한 배열
int i = 0; // Product 배열에 사용될 카운터
void buy(Product2 p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price; //가진돈 - 구입한 제픔가격
int bonustPoint = p.bonusPoint; //제품의 보너스 점수를 추가
cart[i++] = p; //제품을 Product[] cart에 저장한다.
System.out.println(p + "을/를 구입하셨습니다."); //뒤에 String이 오기때문 원래는 p.toString인데 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 + "입니다.");
}
}
public class Ex7_9 {
public static void main(String[] args) {
Buyer2 b = new Buyer2();
b.buy(new Tv2());
b.buy(new Computer2());
b.buy(new Audio2());
b.summary();
System.out.println("현재 남은 돈은 " + b.money + "만원입니다.");
System.out.println("현재 보너스 점수는 " + b.bonusPoint + "점입니다.");
}
}
728x90
반응형