- [Java] 40. 메서드 오버로딩, 상속 응용: 유닛에 마린, 질럿, 저글링 상속시키기2024년 04월 23일
- Song hyun
- 작성자
- 2024.04.23.:22
728x90반응형[Java] 40. 메서드 오버로딩, 상속 응용:
유닛에 마린, 질럿, 저글링 상속시키기
*이전 글: https://whatsthatsound.tistory.com/61
이전에 작성한 스타크래프트 모델링의 소스코드를, 상속을 이용해 더욱 간단하게 만들어보자.
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 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)