[Java] 11. 클래스와 객체_4.Method overloading

김미숙's avatar
Feb 17, 2025
[Java] 11. 클래스와 객체_4.Method overloading
💡
  • 같은 이름의 method가 여러 개 존재할 수 있다.
  • 중복 정의
  • 동일한 이름의 method를 여러 개 정의하는 것

❗ 부모의 method를 자식이 재정의 하면 ❗

  • 부모의 method를 호출하는 순간 부모의 method가 무효화(오버라이드)
  • 자식의 method가 호출된다. (동적 바인딩)
 
‼️

게임 만들기

DarkTempler (hp=100, power=70)
Arkan (hp=100, power=70)
 
5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기
 
생성
→ 질럿2
→ 드라군2
→ 다크템플러2
→ 리버2
→ 아칸2 공격 → 질럿이 드라군 공격 hp 확인
→ 질럿이 다크템플러 공격 hp 확인
→ 리버가 아칸 공격 hp 확인
→ 아칸 리버 공격 hp 확인
→ 드라군이 다크템플러 공격 hp 확인
→ 리버가 리버 공격 hp 확인
 

아래 예제를 사용해서 코드를 완성하시오.

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

parangdajavous