본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 매개변수 다형성 / 하나의 배열에 여러 종류 객체 저장 )

by ✲ 2020. 7. 12.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

매개변수의 다형성 

- 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다. 

- 조상타입의 배열에 자손들의 객체를 담을 수 있다. 

 

* 다형성의 장점 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 배열이 있어 모든 종류의 객체를 저장할 수 있다. 

 

반응형

댓글