반응형
ch7-29 여러 종류의 객체를 배열로 다루기
다형성의 장점
1) 다형적 매개변수
매서드의 매개변수로 조상타입의 참조변수를 사용해서, 하나의 메서드로 여러 타입의 객체를 받을 수 있는 것
2) 하나의 배열에 여러 종류 객체를 저장할 수 있다.
- 조상 타입의 배열에 자손들의 객체를 담을 수 있다.
처음에는 참조형 기본값 null 이 저장되며,
참고로 Vector 클래스라는 것이 있는데
가변 배열 기능을 가지고 있는 클래스이다.
Object[] 라는 멤버를 가지고 있고, 모든 종류의 객체를 저장할 수 있다.
최고 조상인 Object 이기 때문에
배열의 단점은 한 번 배열의 길이를 작성하면, 길이를 변경할 수 없다는 것이지만
Vector는 가변배열 기능 덕분에, 길이도 자유자재로 변경할 수 있다.
package ch07;
class Product {
int price;
int bonuspoint;
Product(int price){
this.price = price;
this.bonuspoint = (int)(price*0.1);
}
}
class Tv extends Product {
Tv() {
super(100);
}
public String toString() {
return "TV";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Computer2 extends Product2 {
Computer2() {
super(200);
}
public String toString() {
return "Computer2";
}
}
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("현재 남은 돈은 "+ money + " 원 입니다. ");
System.out.println("포인트 잔액은 "+ bonusPoint + "점입니다.");
}
}
class Product2 {
int price;
int bonusPoint;
Product2(int price) {
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
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.toString() + "입니다.");
System.out.println("현재 남은 돈은 "+ money + " 원 입니다. ");
System.out.println("포인트 잔액은 "+ bonusPoint + "점입니다.");
}
void summary() {
int sum = 0;
String itemList = "";
for(int i = 0; i < cart.length; i++) {
if(cart[i] != null) {
itemList += (cart[i] +", ");
sum += cart[i].price;
}
}
System.out.println("구매내역: " + itemList + "입니다.");
System.out.println("총 가격: " + sum + "만원 입니다.");
}
}
class Tv2 extends Product2 {
int price = 1000;
int bonusPoint = (int)(price*0.1);
Tv2() {
super(200);
}
public String toString() {
return "TV2";
}
}
class Audio2 extends Product2{
Audio2(){
super(50);
}
public String toString() {
return "Audio2";
}
}
public class Ex7_8 {
public static void main(String args[]) {
Buyer2 b = new Buyer2(); // cart 배열을 만들고
b.buy(new Tv2());
b.buy(new Computer2());
b.buy(new Audio2());
b.summary();
}
}
반응형
'자바의정석' 카테고리의 다른 글
[자바의 정석 - 기초편] ch7-33,34 추상클래스의작성1 (0) | 2022.03.22 |
---|---|
[자바의 정석 - 기초편] ch7-31,32 추상 클래스, 추상 메서드 (0) | 2022.03.22 |
[자바의 정석 - 기초편] ch7-27,28 매개변수다형성 (0) | 2022.03.21 |
[자바의 정석 - 기초편] ch7-26 instanceof 연산자 (0) | 2022.03.21 |
[자바의 정석 - 기초편] ch7-24,25 참조변수의형변환(2) (0) | 2022.03.21 |