============ this 실습===================
필드에 name, level, hp 선언
생성자는 입력받은 값을 name, levle,hp에 넣은 후 player를 만든다.
입력받은 변수 이름과 필드 이름이 같을때 필드와 변수로 다른 공간에 저장되어 있더라도
컴퓨터는 어느게 필드이고 어느게 변수인지 명확하지 않기 때문에 에러를 발생 시킨다고 한다.
이때 필드는 속성에 this.을 붙여서 필드와 변수를 구분할 수 있다.
여기서 this는 나의 라고 생각하면 이해가 편하다.
메서드 생성하기
메서드 실행하기
실행부에서 player park과, kim 을 생성한다.
park 이 kim을 공격한다.
이를 메서드에서 표현하려면
공격받는 kim은 player타입의 target변수 인데 공격을 하는 park은 어떻게 찾아낼수 있을까?
void attack(player target) {} 에서 player target 앞에는 player this가 생략되어 있다.
여기서 this는 자기자신이라고 생각하면 이해 하기가 쉽다.
실제 메서드를 쓸때 매개변수 1개만 넣도록 설정하지만 this가 생략 되어 있다.
target 변수 앞에 p를 넣으면 에러가 발생하는 것을 확인 할 수 있다.
target 변수 앞에 this를 넣으면 에러가 발생하지 않는다.
void attack(player target) {
System.out.printf("%s가 %s를 공격합니다.\n" ,this.Name, target.Name)
}
메서드에서 위와 같이 작성하면 공격자 %s 는 공격하는 객체의 Name 필드가 들어가고
상대방에는 공격받는 객체의 Name 필드가 들어간다.
공격시 상대방의 체력을 10 낮추고 나의 체력을 5회복 하고 싶을때
target.Hp -=10;
this.Hp +=5;
System.out.printf("공격자(%s)의 체력: %d, 상대방 체력:%d\n",this.Name,this.Hp,target.Hp);
}
실행결과
자기 스스로는 공격 할 수 없게 하려면 if문으로 target이 this일때 retrun 시킨다.
void attack(player target) {
// 매개변수1개를 넣지만 자기자신의 this가 숨어 있다.
// 출력메시지 x가 y를 공겹합니다.
// System.out.println("target = "+ target);
System.out.printf("%s가 %s를 공격합니다.\n",this.Name,target.Name);
if(this == target) {
System.out.println("스스로는 공격할 수 없습니다.");
return;
}
//상대방의 체력을 10 낮추고 나의 체력을 5 회복하고 싶어
target.Hp -=10;
this.Hp +=5;
System.out.printf("공격자(%s)의 체력: %d, 상대방 체력:%d\n",this.Name,this.Hp,target.Hp);
}
=========== 생성자의 입력값이 중복일때 코드를 줄이는 방법===============
이름, 레벨, 체력을 입력 받는 생성자가 있고
이름만 입력 받는 생성자가 있다.
이름만 입력 받는 생성자는 레벨과 체력의 기본 값을 가지고 있다.
이름만 입력받는 생성자 실행 예시
이름만 입력받아 생성하는 생성자 실행
아무것도 입력 받지 않는 생성자에게 this("이름없음"); 의 기본 값을 설정 하였다.
이때 나의 생성자 중에 이름만 입력 받는 생성자를 호출 한다.
기본값이 설정되어 있는 생성자 입력 받을 매개변수가 없어도 된다.
player p2는 아무것도 입력받지 않는 생성자를 호출 하였다.
'JAVA' 카테고리의 다른 글
java_객체(getter와setter)_22.05.31(day10) (0) | 2022.05.31 |
---|---|
java_객체배열_22.05.30(day9) (0) | 2022.05.30 |
java_객체(패키지와 접근 제한자)_22.05.27(day8) (0) | 2022.05.27 |
java_객체(default constructor)_22.05.27(day8) (0) | 2022.05.27 |
java_StringMethod_22.05.26(day7) (0) | 2022.05.26 |