안녕하세요.

 

지난시간에는 블루슬라임 클래스에 어택함수를 일부러 적어서 함수의 내용을 덮어쓰기 해보았습니다. 오버라이드 기법이었죠.

 

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
68
69
70
71
72
73
74
75
76
77
78
// Slime.java
 
package study;
 
import javax.swing.JOptionPane;
 
class Slime {
 
    String name;
    int hp = 80;
 
    // 생성자
    public Slime(String n) {
 
        name = n;
 
    }
 
    // 공격
 
    public void attack(Human h) {
 
        if (hp > 0) {
 
            h.hp = h.hp - 10;
 
            if (h.hp < 1) {
                JOptionPane.showMessageDialog(null"Game Over");
                System.exit(0);
            }
 
            Study01.lbl2.setText(name + "의 공격. " + h.name + "의 체력은 " + h.hp + ".");
        }
 
    }
 
}
 
class BlueSlime extends Slime {
 
    // 생성자
    BlueSlime(String n) {
        super(n);
    }
 
    // 약한 공격
    @Override
    public void attack(Human h) {
 
        if (hp > 0) {
 
            h.hp = h.hp - 8;
 
            if (h.hp < 1) {
                JOptionPane.showMessageDialog(null"Game Over");
                System.exit(0);
            }
 
            Study01.lbl2.setText(name + "의 공격. " + h.name + "의 체력은 " + h.hp + ".");
        }
 
    }
 
    // 치료
    void heal(Slime s) {
 
        if (hp > 0 && s.hp > 0) {
 
            s.hp += 10;
 
            if (s.hp > 80) {
                s.hp = 80;
            }
 
            Study01.lbl2.setText(name + "는 " + s.name + "를 치료. 그의 체력은 " + s.hp + ".");
        }
    }
}

 

그런데 말입니다.

 

어택함수가 hp 감소 부분 말고는 동일하게 적혀있으니까 중복인 느낌이 많이들죠?

 

그래서 지난번에 배운 오버로딩 기법을 사용해서 중복을 제거해보도록 하겠습니다.

 

 

// Slime

 

위는 부모클래스인 슬라임 클래스입니다.

 

기존의 어택함수에다가는 데미지 인수를 추가하여 데미지만큼 체력이 감소하도록 했고, 데미지 인수가 없는 어택함수를 따로 하나 만들어뒀습니다.

 

이렇게 하면 어택함수를 호출할때 인수가 휴먼인수만 있으면 21행의 함수가 실행되겠죠. 그 함수가 실행되면 데미지 인수에 10을 넣어서 25행의 함수가 실행이 됩니다. 따라서 결과적으로 체력이 10이 깎이는거죠.

 

이게 블루슬라임 클래스와 무슨 관련이 있냐구요? 아래를 보시죠.

 

 

// BlueSlime

 

블루슬라임 클래스도 인수가 두개인 어택함수를 상속받아서 가지고 있습니다.

 

블루슬라임 클래스의 인수가 한개인 어택함수를 호출하면 데미지 인수에 8을 넣어서 인수가 두개인 어택함수가 호출이 되는 구조입니다^^

 

어택함수를 한줄로 줄이는데 성공했네요^^

 

감사합니다.

 

+ Recent posts