매개변수의 다형성

essential·2023년 8월 21일

객체 지향

목록 보기
30/40

매개변수의 다형성

  • 참조형 매개변수는 메소드 호출 시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨 줄 수 있다.
    • 장점
      • 다형적 매개 변수
      • 하나의 배열로 여러 종류 객체 다루기

Ex7_8

class Product {
	int price;			// 제품의 가격
	int bonusPoint;	// 제품구매 시 제공하는 보너스점수

	Product(int price) {
		this.price = price;
		bonusPoint = (int)(price/10.0);	// 보너스점수는 제품가격의 10%
	}
}

class Tv1 extends Product {
	Tv1() {
		// 조상클래스의 생성자 Product(int price)를 호출한다.
		super(100);		// Tv의 가격을 100만원으로 한다.
	}

	// Object클래스의 toString()을 오버라이딩한다.
	public String toString() { return "Tv"; }
}

class Computer extends Product {
	Computer() { super(200); }

	public String toString() { return "Computer"; }
}

class Buyer {	// 고객, 물건을 사는 사람
	int money = 1000;	  // 소유금액
	int bonusPoint = 0; // 보너스점수

	void buy(Product p) {
		if(money < p.price) {
			System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
			return;
		}

		money -= p.price;            // 가진 돈에서 구입한 제품의 가격을 뺀다.
		bonusPoint += p.bonusPoint;  // 제품의 보너스 점수를 추가한다.
		System.out.println(p + "을/를 구입하셨습니다.");
		//System.out.println(p.toString() + "을/를 구입하셨습니다."); // 위와 같은 코
	}
}

class Ex7_8 {
	public static void main(String args[]) {
		Buyer b = new Buyer();

		b.buy(new Tv1()); //buy(Product p)
//= Product p = new Tv1();
//  b.buy(p)  위 코드 한 줄이 두 줄의 코드와 같은 의미임
		b.buy(new Computer()); //buy(product p)

		System.out.println("현재 남은 돈은 " + b.money + "만원입니다.");
		System.out.println("현재 보너스점수는 " + b.bonusPoint + "점입니다.");
	}
}
profile
essential

0개의 댓글