반응형
남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다.
매개변수의 다형성
- 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다.
- 조상타입의 배열에 자손들의 객체를 담을 수 있다.
* 다형성의 장점 1. 다형적 매개변수 2. 하나의 배열로 여러종류 객체 다루기
다형적 매개변수 예제)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
class Product{
int price;
int bonusPoint;
Product(int price){
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
class Tv1 extends Product{
Tv1(){
super(100);
}
public String toString() {return "Tv";}
}
class Computer extends Product{
Computer(){
super(200);
}
public String toString() {return "compuber";}
}
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) {
// TODO Auto-generated method stub
Buyer b = new Buyer();
Product p = new Tv1();
b.buy(p);
// b.buy(new Tv1()); 위 두줄을 한줄로 작성한 것
b.buy(new Computer());
System.out.println("현재 남은 돈은 " + b.money +"만원입니다.");
System.out.println("현재 보너스점수는 " + b.bonusPoint +"점입니다.");
}
}
|
cs |
출력
Tv을/를 구입하셨습니다.
compuber을/를 구입하셨습니다.
현재 남은 돈은 700만원입니다.
현재 보너스점수는 30점입니다.
하나의 배열로 여러종류 객체 다루기 예제)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
class Product2 {
int price;
int bonusPoint;
Product2(int price){
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
class Tv2 extends Product2{
Tv2(){super(100);}
public String toString() {return "Tv";}
}
class Computer2 extends Product2{
Computer2(){super(200);}
public String toString() { return "Computer";}
}
class Audio2 extends Product2 {
Audio2(){super(50);}
public String toString() { return "Audio";}
}
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("잔액부족하여 물건 구입 X");
return;
}
money -=p.price;
bonusPoint += p.bonusPoint ;
cart[i++]= p; // 제품을 Product[] cart에 저장
System.out.println(p+"을/를 구입");
}
void summary() {
int sum = 0;
String itemList = "";
for(int i=0; i<cart.length; i++) {
if(cart[i]==null)
break;
sum+= cart[i].price;
itemList +=cart[i]+", ";
}
System.out.println("구입하신 물품의 총 금액은 " + sum +"만원입니다.");
System.out.println("구입하신 제품은 " + itemList +"입니다.");
}
}
public class Ex7_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();
}
}
|
cs |
출력
Tv을/를 구입
Computer을/를 구입
Audio을/를 구입
구입하신 물품의 총 금액은 350만원입니다.
구입하신 제품은 Tv, Computer, Audio, 입니다.
* Vector 클래스는 가별 배열 가능
* Vector 클래스는 Object 배열이 있어 모든 종류의 객체를 저장할 수 있다.
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
자바의 정석 기초 ( 인터페이스 / 인터페이스 추상클래스 공통점 & 차이점 ) (0) | 2020.07.15 |
---|---|
자바의 정석 기초 ( 추상클래스 (abstract class) / 추상메서드 (abstract method) ) (0) | 2020.07.14 |
자바의 정석 기초 ( 참조변수의 형변환 / instanceof 연산자 ) (0) | 2020.07.12 |
자바의 정석 기초 ( 캡슐화 / 다형성) (0) | 2020.07.12 |
자바의 정석 기초 ( 제어자 / 접근 제어자 / public / protected / default / private ) (0) | 2020.07.12 |
댓글