[자바 (JAVA)] 38. 오버라이딩으로 문제 해결 해보기

귤's avatar
Feb 14, 2025
[자바 (JAVA)] 38. 오버라이딩으로 문제 해결 해보기
package ex05.ch04; /* DarkTempler (hp=100, power=70) Arkan (hp=100, power=70) 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기 생성 → 질럿2 → 드라군2 → 다크템플러2 → 리버2 → 아칸2 공격 → 질럿이 드라군 공격 hp 확인 → 질럿이 다크템플러 공격 hp 확인 → 리버가 아칸 공격 hp 확인 → 아칸 리버 공격 hp 확인 → 드라군이 다크템플러 공격 hp 확인 → 리버가 리버 공격 hp 확인 */ // Protoss 만들어서 추상적인 것에 의존하기 (attack 함수 결국 한 개에요) ====================================== class Protoss { int getHp() { return 3843270; } int getPower() { return 38489290; } void setHp(int hp) { } void setPower(int power) { } void attack(Protoss unit) { } } // 1. 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기 (아칸 -> 다크템플러 -> 리버 -> 드라군 -> 질럿 순서로 작성함) class Arkan extends Protoss { int hp = 100; int power = 70; int getHp() { return hp; } int getPower() { return power; } void setHp(int hp) { this.hp = hp; } void setPower(int power) { this.power = power; } public void attack(Protoss unit) { // 1. 맞는 놈의 hp를 변경 unit.setHp(unit.getHp() - this.power); } } class DarkTempler extends Protoss { int hp = 100; int power = 70; int getHp() { return hp; } int getPower() { return power; } void setHp(int hp) { this.hp = hp; } void setPower(int power) { this.power = power; } public void attack(Protoss unit) { // 1. 맞는 놈의 hp를 변경 unit.setHp(unit.getHp() - this.power); } } class River extends Protoss { int hp = 100; int power = 50; int getHp() { return hp; } int getPower() { return power; } void setHp(int hp) { this.hp = hp; } void setPower(int power) { this.power = power; } public void attack(Protoss unit) { // 1. 맞는 놈의 hp를 변경 unit.setHp(unit.getHp() - this.power); } } class Dragoon extends Protoss { int hp = 100; int power = 10; int getHp() { return hp; } int getPower() { return power; } void setHp(int hp) { this.hp = hp; } void setPower(int power) { this.power = power; } public void attack(Protoss unit) { //DIP 의존 // 1. 맞는 놈의 hp를 변경 unit.setHp(unit.getHp() - this.power); } } class Zealot extends Protoss { int hp = 100; int power = 20; int getHp() { return hp; } int getPower() { return power; } void setHp(int hp) { this.hp = hp; } void setPower(int power) { this.power = power; } public void attack(Protoss unit) { // 1. 맞는 놈의 hp를 변경 unit.setHp(unit.getHp() - this.power); } } public class StarGame { public static void main(String[] args) { // 질럿 Protoss z1 = new Zealot(); Protoss z2 = new Zealot(); // 드라군 Protoss d1 = new Dragoon(); Protoss d2 = new Dragoon(); // 다크템플러 Protoss dt1 = new DarkTempler(); Protoss dt2 = new DarkTempler(); // 리버 Protoss r1 = new River(); Protoss r2 = new River(); // 아칸 Protoss a1 = new Arkan(); Protoss a2 = new Arkan(); // 1. 질럿이 드라군 공격 hp 확인 z1.attack(d1); System.out.println("드라군 d1의 hp : " + d1.getHp()); // 80 // 2. 질럿이 다크템플러 공격 hp 확인 z1.attack(dt1); System.out.println("다크템플러 dt1의 hp : " + dt1.getHp()); // 80 // 3. 리버가 아칸 공격 hp 확인 r1.attack(a1); System.out.println("아칸 a1의 hp : " + a1.getHp()); // 50 // 4. 아칸 리버 공격 hp 확인 a1.attack(r1); System.out.println("리버 r1의 hp : " + r1.getHp()); // 30 // 5. 드라군이 다크템플러 공격 hp 확인 d1.attack(dt1); System.out.println("다크템플러 dt1의 hp : " + dt1.getHp()); // 70 // 6. 리버가 리버 공격 hp 확인 r1.attack(r2); System.out.println("리버 r2의 hp : " + r2.getHp()); // 50 } }
notion image
Share article

gyul