참조변수의 다형적 특징은 메서드의 매개변수에도 적용이 된다.
class Product2 {
int price;
int bonusPoint;
Product2 (int price){
this.price = price;
bonusPoint = (int)(price/10.0);
}
Product2() {}
}
부모 클래스를 다음과 같이 작성한다. 가격과 포인트를 구하도록 한다.
class Tv2 extends Product2 {
Tv2() { super(100); }
public String toString() {return "Tv"; }
}
다음과 같이 Tv()라는 자손클래스로 생성자 내부 클럭안에 super(100)이 있기 때문에 price=100으로 적용된다. 이러한 방법으로
class Buyer2 {
int money =1000; //소유금액
int bonusPoint =0; //보너스 포인트
Product2[] cart = new Product2[10];
int i =0;
void buy(Product2 p){
if (money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -=p.price;
bonusPoint +=p.bonusPoint;
cart[i++] = p;
System.out.println(p+"을/를 구입하셨습니다.");
}
void buy(Product2 p) 메서드에서 매개변수로 Product2 p 는 조상타입의 참조변수를 참조할 수 있다.
즉 어떤 Product2의 this.price 를 불러오는 것이다. 그리고 이러한 메서드를 아래 메인 클래스에서
buy()메서드이 매개변수로 각 상품 메서드를 호출하여 조상메서드의 값을 변경,참조하여 불러오는 것이다.
public class java7_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();
}
}