java/코드 리뷰
10. oop5 - (1) Starcraft Demo (추상클래스)
Astaroth아스
2020. 4. 2. 20:17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package oop5;
/**
* 1
* @author HYB
*
*/
// 추상 클래스 정의
public abstract class Unit {
String name;
void move() {
System.out.println("[" + name + "] 이 지정된 포인트로 이동합니다.");
}
// 추상 메서드 정의
abstract void attack();
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package oop5;
/**
* 2
* @author HYB
*
*/
public class Marine extends Unit {
@Override
void attack() {
System.out.println("[" + name + "]은 적을 총으로 사살합니다.");
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package oop5;
/**
* 3
* @author HYB
*
*/
public class Firebat extends Unit {
@Override
void attack() {
System.out.println("[" + name + "]은 화염으로 적을 사살합니다.");
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package oop5;
/**
* 4
* @author HYB
*
*/
public class Ghost extends Unit {
@Override
void attack() {
System.out.println("[" + name + "]은 자신을 감추고 적을 공격합니다.");
}
}
|
1
2
3
4
5
6
7
8
9
10
|
package oop5;
public class Overload extends Unit{
// 수행문이 없어도 메서드 몸체만 있으면 구현 메서드다
@Override
void attack() {}
}
|
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
|
package oop5;
public class Starcraft {
Unit[] units = new Unit[200];
int unitCount = 0;
void addUnit(Unit unit) {
units[unitCount] = unit;
unitCount++;
System.out.println(unit.name + "이 추가되었습니다. [현재 총 유닛수 = " + unitCount + "]");
}
void click() {
for (int i=0; i<unitCount; i++) {
Unit unit = units[i];
unit.move();
}
}
void clickA() {
for (int i=0; i<unitCount; i++) {
Unit unit = units[i];
unit.attack();
}
}
}
|
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
|
package oop5;
public class Play {
public static void main(String[] args) {
Starcraft starcraft = new Starcraft();
Marine u1 = new Marine();
u1.name = "마린";
starcraft.addUnit(u1);
Marine u2 = new Marine();
u2.name = "마린";
starcraft.addUnit(u2);
Ghost u3 = new Ghost();
u3.name = "고스트";
starcraft.addUnit(u3);
Firebat u4 = new Firebat();
u4.name = "파이어뱃";
starcraft.addUnit(u4);
// 이동
starcraft.click();
// 공격
starcraft.clickA();
}
}
|