728x90
반응형
34) 매개변수의 다형성(1)-다형적 매개변수
장점:
①다형적 매개변수
②하나의 배열로 여러 종류 객체 다루기
지금까지 배운 다형성:
①Tv t = new SmartTv();
②참조 변수의 형 변환-리모콘 바꾸기
③instanceof연산자를 이요한 형변환 가능 여부 판단
1. 매개변수 다형성
-참조형 매개변수는 메서드 호출 시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다.
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
|
class Product{
int price;
int bonusPoint;
}
class Tv extends Product{ }
class Audio extends Product{}
class Computer extends Product{}
class Buyer{
int money = 10000;
int bonusPoint = 0;
void buy(Tv t) {
money -= t.price;
bonusPoint += t.bonusPoint;
}
void buy(Audio a) {//오버로딩
money -= a.price;
bonusPoint += a.bonusPoint;
}
void buy(Computer c) {//오버로딩
money -= c.price;
bonusPoint += c.bonusPoint;
}
} |
cs |
물건을 살 때마다 매번 Buyer클래스 buy함수에 TV, Audio, Computer를 각각 추가해주면 시간도 많이 걸릴뿐더러 불편하다. 그래서
왼쪽 코드를 오른쪽처럼 변경시켜 코드를 간편화 해줍니다.
Product p에는 'new Tv(), new Audio(), new Computer()'가 들어갈 수 있겠죠.
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
55
56
57
58
59
60
61
62
63
64
65
66
|
class Product{
int price;//제품가격
int bonusPoint;//제품보너스
Product(int price){//tv,audio,computer샀을시에
this.price = price;//각 제품 가격이 가격에 대입
bonusPoint = (int)price/10;//가격의 10%를 보너스로 적립
}
}
class Tv extends Product{
Tv(){
super(200);//조상생성자상속. product 매개변수에 tv가격 200대입
}
public String toString() {//반환을 String으로 하는 toString메서드 생성
return "티비";//Tv의 주솟값을 String으로 반환
}
}
class Audio extends Product{
Audio(){
super(50);//조상생성자상속. product 매개변수에 audio가격 50대입
}
public String toString() {//반환을 String으로 하는 toString메서드 생성
return "오디오";//Audio의 주솟값을 String으로 반환
}
}
class Computer extends Product{
Computer(){
super(100);//조상생성자상속. product 매개변수에 Computer가격 100대입
}
public String toString() {//반환을 String으로 하는 toString메서드 생성
return "컴퓨터";//Computer의 주솟값을 String으로 반환
}
}
class Buyer{
int money = 10000;//사는 사람이 가지고 있는 돈
int bonusPoint = 0;//보너스는 0임
void buy(Product p) {//사는행위메서드. 매개변수로 Tv,Audio,Computer를 넣을 수 있음.
if(money<p.price) {//만약 사는 사람이 갖고 있는 돈이 산 제품의 총 가격보다 적으면
System.out.println("잔액부족");//이 문구 출력
}else {//아니라면
money -= p.price;//제품을 살 때 이 사람의 돈에서 빠져나감. 가격만큼
bonusPoint += p.bonusPoint;//보니스는 원래 보너스에서 추가됨
System.out.println(p+"를 구입하였습니다.");
}
}
}
public class Test {
public static void main(String[] args) {
Buyer b = new Buyer();//사는사람 객체생성
Tv t = new Tv();//Tv객체생성
Audio a = new Audio();//Audio객체생성
Computer c = new Computer();//Computer객체생성
b.buy(t);//Tv를 구매
b.buy(c);//Computer를 구매
System.out.println("현재 남은 돈은 "+b.money+"입니다.");
System.out.println("현재 보너스점수는 "+b.bonusPoint+"점입니다.");
}
}
|
cs |
*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*
728x90
반응형
'back-end > JAVA' 카테고리의 다른 글
36) 추상클래스(abstract class), 추상메서드(abstract method) (0) | 2021.06.10 |
---|---|
35) 매개변수의 다형성(2)-하나의 배열로 여러 종류 객체 다루기 (0) | 2021.06.10 |
33) instanceof연산자 (0) | 2021.06.09 |
32) 참조변수의 형변환 (0) | 2021.06.09 |
31) 다형성(polymorphism) (0) | 2021.06.09 |