Back-End/자바의 정석
자바의 정석 - 매개 변수의 다형성
호강하는 지해
2023. 12. 18. 00:22
728x90
참조형 매개변수는 메서드 호출 시 , 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다.
장점
1) 다형적 매개변수
2) 하나의 배열로 여러 종류 객체 다루기 (객체 마다 메소드를 만들어주지 않아도 됨)
Product p = new Tv1();
// 아래 두 줄은 같은 의미임
b.buy(p);
b.buy(new Tv1());
상속 할 부모 클래스
public class Product {
int price; // 제품의 가격
int bonusPoint; // 제품 구매 시 주어지는 포인트
Product(int price){
this.price = price;
bonusPoint = (int)(price/10.0); // 보너스 포인트는 제품의 10%
}
}
상속 받을 자식 클래스
public class Tv1 extends Product { // Product에서 상속 받는다.
Tv1(){
super(100); // 조상클래스의 생성자를 호출하여 100을 입력한다.
}
public String toString(){ // Object클래스의 toString을 오버라이딩 한다.
return "TV";
}
}
public class Computer1 extends Product {
Computer1(){
super(100);
}
public String toString(){
return "Computer";
}
}
public class iPhone13 extends Product {
iPhone13(){
super(600);
}
public String toString() {
return "iPhone13";
}
}
구매자 클래스
public class buyer { // 제품을 구매할 구매자 클래스
int money = 1000; // 구매자의 보유 금액
int bonusPoint = 0; // 구매자의 보유 포인트
public void buy(Product p){
if(money < p.price){
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price; // 보유 금액에서 제품의 가격을 뺀다.
bonusPoint += p.bonusPoint; // 보유 포인트에서 제품 포인트를 더한다.
System.out.println(p + "을/를 구입하셨습니다.");
}
}
실행
public static void main(String[] args) {
buyer b = new buyer();
// Tv1 t = new Tv1();
// b.buy(t);
b.buy(new Tv1());
b.buy(new Computer1());
b.buy(new iPhone13());
System.out.println("현재 남은 돈은 " + b.money + "입니다.");
System.out.println("현재 보너스 점수는 " + b.bonusPoint + "입니다.");
}
콘솔창에 찍히는 결과
// TV을/를 구입하셨습니다.
// Computer을/를 구입하셨습니다.
// iPhone13을/를 구입하셨습니다.
// 현재 남은 돈은 200입니다.
// 현재 보너스 점수는 80입니다.
728x90