# 리얼 격투 게임
java에서 정적 메소드 안에서는 일반(non-static) 멤버 변수, 일반 메소드를 호출할 수 없는 것으로 알고 있는데
이 문제에서 fight() 메소드 안에서 punch() 메소드와 hp 멤버 변수를 불러와서 사용하고 있는건
fight() 메소드가 정적 메소드라고 할 지라도
Hero 클래스 객체를 파라미터 변수로 가지고 있기 때문인가요? (Hero a, Hero b)
#### CODE <a class='btn btn-default' href='/codes/52028'>Link</a>
```
public class Main {
public static void main (String[] args) {
Hero leona = new Hero("레오나", 30);
Hero arthas = new Hero("아서스", 30);
Hero.fight(leona, arthas);
}
}
class Hero {
String name;
int hp;
public Hero(String n, int h) {
this.name = n;
this.hp = h;
}
public void punch(Hero target) {
System.out.printf("[%s]의 펀치\n", this.name);
target.hp -= 10;
System.out.printf("\t%s: %d/30\n", target.name, target.hp);
}
public static void fight(Hero a, Hero b) {
while(a.hp > 0 && b.hp > 0) {
if (Math.random() < 0.5)
a.punch(b);
else
b.punch(a);
}
}
}
```
#### INPUT
```
```
#### OUPUT
```
[레오나]의 펀치
아서스: 20/30
[레오나]의 펀치
아서스: 10/30
[아서스]의 펀치
레오나: 20/30
[레오나]의 펀치
아서스: 0/30
```
sehongpark님의 답변
### 정적 메소드 안에서는
this 키워드를 사용할 수 없습니다.
(주체 객체가 없기 때문)
따라서, this를 사용(또는 생략)한
인스턴스 변수와 인스턴스 메소드를 호출 할 수 없죠.
this가 아닌
다른 레퍼런스 변수로의 객체 활용은 가능합니다.
질문주신 fight() 메소드는
this가 아닌 a와 b를 사용해 객체를 활용하므로
각 변수에 연결된 객체의
인스턴스 변수와 메소드를 사용할 수 있습니다.