728x90
반응형
[Java] 40. 메서드 오버로딩, 상속 응용:
유닛에 마린, 질럿, 저글링 상속시키기
*이전 글: https://whatsthatsound.tistory.com/61
[Java] 27. Java로 스타크래프트 모델링하기
[Java] 27. Java로 스타크래프트 모델링하기 모델링 과정 1. 질럿, 저글링, 마린 클래스 생성하기 (1) 클래스마다 사용자 정의 생성자 만들기 (2) 클래스 별로 공격할 때/공격 받았을 때의 메서드 만들
whatsthatsound.tistory.com
이전에 작성한 스타크래프트 모델링의 소스코드를, 상속을 이용해 더욱 간단하게 만들어보자.
1. 상위 클래스인 Unit을 생성한다.
-> 이 때, Unit의 변수는 질럿/마린/저글링 클래스가 공통적으로 지니는 name/power/hp가 된다.
2. 중복되는 메서드를 찾는다.
->이전의 코드를 살펴본다면...
getter/setter 메서드
beAttacked(공격을 당했을 때의 메서드)
attack(다른 캐릭터를 공격할 때의 메서드)
showInfo(상태창 조회 메서드) 등의 메서드들이 세 클래스 파일 내부에서 중복된다는 사실을 알 수 있다.
->해당 메서드들을 상위 클래스인 Unit에서 선언하고, Unit을 세 클래스들이 상속받는다면,
더욱 간단하게 코드를 작성할 수 있다.
package starcraft.ver03;
/**
* 접근 제어 지시자
* public
* protected
* default
* private
*/
public class Unit {
protected String name;
protected int power;
protected int hp;
public Unit(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public void showInfo() {
System.out.println("=====상태창=====");
System.out.println(" 이름: "+this.name);
System.out.println(" 공격력: "+this.power);
System.out.println(" 생명력: "+this.hp);
}
public void beAttacked(int power) {
// 방어적 코드 작성
if (hp <= 0) {
System.out.println("[" + this.name + "]은 이미 사망했습니다.");
hp = 0;
return;
}
hp -= power;
}
// 질럿이 저글링을 공격합니다.
public void attack(Zergling z) {
System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
z.beAttacked(this.power); // 질럿의 공격력을 beAttacked 메서드에 대입
}
// 질럿이 마린을 공격합니다.
public void attack(Marine m) {
System.out.println("[" + this.name + "]이 [" + m.getName() + "]을 공격합니다.");
m.beAttacked(this.power);
}
// 질럿이 마린을 공격합니다.
public void attack(Zealot z) {
System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
z.beAttacked(this.power);
}
}
package starcraft.ver03;
public class Marine extends Unit {
public Marine(String name) {
super(name);
super.name=name;
super.power=power;
super.hp=70;
}
}
package starcraft.ver03;
public class StarCraftTest1 {
public static void main(String[] args) {
Zealot zealot=new Zealot("잠자던 질럿");
Marine marine=new Marine("밥먹던 마린");
Zergling zergling=new Zergling("야근하는 저글링");
zealot.showInfo();
marine.showInfo();
zergling.showInfo();
System.out.println("-----------------");
zergling.attack(marine);
marine.showInfo();
marine.attack(zealot);
zealot.showInfo();
} // end of main
} // end of class
728x90
반응형
'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 42. 연관 관계 활용: 학생과 학급 클래스 만들기 (0) | 2024.04.24 |
---|---|
[Java] 41. 연관 관계와 의존 관계 (0) | 2024.04.23 |
[Java] 39. 포함 관계 (0) | 2024.04.23 |
[Java] 38. 상속 관계와 메서드 오버라이딩 (0) | 2024.04.23 |
[Java] 37. 메서드 오버로딩 (0) | 2024.04.23 |