부모타입으로 적용하면 상속받는 타입 사용가능
package kr.or.kihd.polymorphism3;
public class TV extends Product {
public TV() {
//조상클래스의 매개변수가 있는 생성자 Product(int price){}를 호출
super(300);
}
@Override
public String toString() {
return "TV";
}
}
package kr.or.kihd.polymorphism3;
public class Product {
int price; //제품가격
int bounsPoint; //제품구매시 제공하는 보너스 점수
public Product(int price) {
this.price = price;
//보너스 점수 제품가격의 10%를 적립
this.bounsPoint = (int)(price/10.0);
}
}
package kr.or.kihd.polymorphism3;
public class Computer extends Product {
public Computer() {
super(200);
}
@Override
public String toString() {
return "Computer";
}
}
package kr.or.kihd.polymorphism3;
public class Audio extends Product {
public Audio() {
super(100);
}
@Override
public String toString() {
return "Audio";
}
}
buy 부모타입으로 적용하면 상속받는 타입 사용가능
package kr.or.kihd.polymorphism3;
//독립클래스
public class Buyer {
int money = 1000; //소유금액
int bonusPoint = 0; //보너스 점수
public void buy(Product product) {
//구매자가 가진 돈보다 제품의 가격이 비싼 경우
if(this.money < product.price) {
System.out.println("잔액이 부족하여, 물건 구입이 안됩니다.");
return;
}
this.money -= product.price;
this.bonusPoint += product.bounsPoint;
System.out.println(product + "를 구매하셨습니다.");
}
public void buy(Audio audio) {
//구매자가 가진 돈보다 제품의 가격이 비싼 경우
if(this.money < audio.price) {
System.out.println("잔액이 부족하여, 물건 구입이 안됩니다.");
return;
}
this.money -= audio.price;
this.bonusPoint += audio.bounsPoint;
System.out.println(audio + "를 구매하셨습니다.");
}
}
package kr.or.kihd.polymorphism3;
public class PrameterTest {
public static void main(String[] args) {
Buyer buyer = new Buyer();
buyer.buy(new TV());
System.out.println("현재 남은 돈: " + buyer.money + "만원입니다." );
System.out.println("현재 남은 포인트는 : " + buyer.bonusPoint + "점입니다.");
buyer.buy(new Audio());
buyer.buy(new Computer());
System.out.println("현재 남은 돈: " + buyer.money + "만원입니다." );
System.out.println("현재 남은 포인트는 : " + buyer.bonusPoint + "점입니다.");
}
}