* 매개변수의 다형성
- 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
* 장점
1. 다형적 매개변수
2. 하나의 배열로 여러종류 객체 다루기
1. 다형적 매개변수
- 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
/* 다형성을 고려하지 않은 하드 코딩 */
class Product {
int price;
int bonusPoint;
}
class TV extends Product {}
class Computer extends Product {}
class Audio extends Product {}
class Buyer { // 물건사는 사람
int money = 1000; // 소유금액
int bonusPoint = 0; // 보너스점수
void buy(TV t) {
money -= t.price;
bonusPoint += t.bonusPoint;
}
void buy(Computer c) {
money -= c.price;
bonusPoint += c.bonusPoint;
}
void buy(Audio a) {
money -= a.price;
bonusPoint += a.bonusPoint;
}
}
/* 다형성을 고려한 코딩 */
class Product {
int price;
int bonusPoint;
}
class TV extends Product {}
class Computer extends Product {}
class Audio extends Product {}
class Buyer { // 물건사는 사람
int money = 1000; // 소유금액
int bonusPoint = 0; // 보너스점수
void buy(Product p) {
money -= p.price;
bonusPoint += p.bonusPoint;
}
}
- 메서드 하나로 여러가지 자손 객체들을 매개 변수로 사용할 수 있다.
package AFTERCH6;
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 + "을/를 구입하셨습니다.");
}
}
class Ex7_8 {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv1());
b.buy(new Computer());
System.out.println("현재 남은 돈은 " + b.money + "만원입니다.");
System.out.println("현재 보너스점수는 " + b.bonusPoint + "점입니다.");
}
}
'Programming > Java' 카테고리의 다른 글
[JAVA STUDY] 8주차 : 인터페이스 (0) | 2021.11.23 |
---|---|
[JAVA STUDY] 7주차 : 패키지 (0) | 2021.11.15 |
[JAVA] 참조변수의 형변환, Instanceof 연산자 (0) | 2021.11.09 |
[JAVA] 캡슐화, 다형성 (0) | 2021.11.08 |
[JAVA] 제어자 (0) | 2021.11.08 |