Contents
게임 만들기- 같은 이름의 method가 여러 개 존재할 수 있다.
- 중복 정의
- 동일한 이름의 method를 여러 개 정의하는 것
❗ 부모의 method를 자식이 재정의 하면 ❗
- 부모의 method를 호출하는 순간 부모의 method가 무효화(오버라이드)
- 자식의 method가 호출된다. (동적 바인딩)
아래 예제를 사용해서 코드를 완성하시오.
package ex05.ch03;
class Protoss {
}
class River {
int hp;
int power;
public River() {
this.hp = 100;
this.power = 50;
}
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
}
class Dragoon {
int hp;
int power;
public Dragoon() {
this.hp = 100;
this.power = 10;
}
// 기존 오브젝트 수정
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
}
class Zealot {
int hp;
int power;
public Zealot() {
this.hp = 100;
this.power = 20;
}
// 기존 오브젝트 수정
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
}
public class StarGame {
public static void main(String[] args) {
Zealot z1 = new Zealot();
Zealot z2 = new Zealot();
Dragoon d1 = new Dragoon();
z1.attack(d1);
System.out.println("드라군 d1의 hp : " + d1.hp);
z1.attack(z2);
System.out.println("질럿 z2의 hp : " + z2.hp);
}
}
overloading으로 게임 만들기
package ex05.ch03;
class Protoss {
}
class Arkan {
int hp;
int power;
public Arkan() {
this.hp = 100;
this.power = 70;
}
public void attack(Arkan unit) {
unit.hp = unit.hp - this.power;
}
public void attack(DarkTempler unit) {
unit.hp = unit.hp - this.power;
}
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
}
class DarkTempler {
int hp;
int power;
public DarkTempler() {
this.hp = 100;
this.power = 70;
}
public void attack(DarkTempler unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Arkan unit) {
unit.hp = unit.hp - this.power;
}
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
}
class River {
int hp;
int power;
public River() {
this.hp = 100;
this.power = 50;
}
public void attack(DarkTempler unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Arkan unit) {
unit.hp = unit.hp - this.power;
}
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
}
class Dragoon {
int hp;
int power;
public Dragoon() {
this.hp = 100;
this.power = 10;
}
public void attack(Arkan unit) {
unit.hp = unit.hp - this.power;
}
public void attack(DarkTempler unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
}
class Zealot {
int hp;
int power;
public Zealot() {
this.hp = 100;
this.power = 20;
}
public void attack(Arkan unit) {
unit.hp = unit.hp - this.power;
}
public void attack(DarkTempler unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Dragoon unit) {
unit.hp = unit.hp - this.power;
}
public void attack(Zealot unit) {
unit.hp = unit.hp - this.power;
}
public void attack(River unit) {
unit.hp = unit.hp - this.power;
}
}
public class StarGame {
public static void main(String[] args) {
Zealot z1 = new Zealot();
Zealot z2 = new Zealot();
Dragoon d1 = new Dragoon();
Dragoon d2 = new Dragoon();
River r1 = new River();
River r2 = new River();
DarkTempler da1 = new DarkTempler();
DarkTempler da2 = new DarkTempler();
Arkan a1 = new Arkan();
Arkan a2 = new Arkan();
z1.attack(d1);
System.out.println("드라군 d1의 hp : " + d1.hp);
z1.attack(z2);
System.out.println("질럿 z2의 hp : " + z2.hp);
// → 질럿이 드라군 공격 hp 확인
z1.attack(d2);
System.out.println("드라군 d2의 hp : " + d1.hp);
// → 질럿이 다크템플러 공격 hp 확인
z1.attack(da1);
System.out.println("다크템플러 da1의 hp: " + da1.hp);
// → 리버가 아칸 공격 hp 확인
r1.attack(a1);
System.out.println("아칸 a1의 hp : " + a1.hp);
// → 아칸 리버 공격 hp 확인
a1.attack(r1);
System.out.println("리버 r1의 hp : " + r1.hp);
// → 드라군이 다크템플러 공격 hp 확인
d1.attack(da1);
System.out.println("다크템플러 da1의 hp : " + da1.hp);
// → 리버가 리버 공격 hp 확인
r1.attack(r2);
System.out.println("리버 r2의 hp : " + r2.hp);
}
}
Share article