# 리뷰: 게터/세터와 this
#### CODE <a class='btn btn-default' href='/codes/42647'>Link</a>
```
public class KnightTest {
public static void main(String[] args) {
// 객체 생성
Knight don = new Knight("돈키호테", 30);
// 정보 출력
System.out.println("[객체 생성]");
System.out.printf(don.toString());
// 체력 증가: 기존 체력 + 30
don.setHp(don.getHp() + 30);
// 결과 출력
System.out.println("[체력 증가 +30]");
System.out.printf(don.toString());
}
}
class Knight {
// 필드
private String name;
private int hp;
// 생성자
Knight (String name, int hp) {
this.name = name;
this.hp = hp;
}
// 게터
String getName(){
return this.name;
}
int getHp(){
return this.hp;
}
// 세터
void setName(String name) {
this.name = name;
}
void setHp(int hp) {
this.hp = hp;
}
public String toString(){
return String.format("\tKnight { name: %s, hp: %d }\n", this.name, this.hp);
}
}
```
#### INPUT
```
```
#### OUPUT
```
[객체 생성]
Knight { name: 돈키호테, hp: 30 }
[체력 증가 +30]
Knight { name: 돈키호테, hp: 60 }
```
public String toString(){
return String.format("\tKnight { name: %s, hp: %d }\n", this.name, this.hp);
}
public String toString() <- 여기서 public을 빼고, 그냥 디폴트인 String toString()으로만 작성하면 에러가 나는 이유가 궁금합니다.
this.name과 this.hp가 외부에서 접근할 수 없기 때문에 그런건가요?
sehongpark님의 답변
## toString() 메소드는
조금 특별한 메소드입니다. 모든 객체들이 기본적으로 가지고 있는 메소드인데요. 따라서 반드시 public을 붙여줘야 합니다.
보다 자세한 내용은 "자바 Object toString 메소드" 정도로 구글링 해보세요.
kjs990114님의 답변
오버라이딩을 할때는 접근제어자를 조상클래스의 메서드보다 좁게 설정할 수 없습니다
부모클래스인 Object에서
toString()메서드의 접근제어자는 public이기떄문에 -> public String toString()
자식클래스에서 오버라이딩할때는
무조건 public을 붙여주셔야합니다