# 리뷰: 엘프의 연속 확장
자식 클래스 생성자를 생성할때
super.name = name;
super.hp = hp;
이런식은 안되나요?
super(name, hp) 그냥 이런식이라고 암기식으로 알고있으면 될까요?
#### CODE <a class='btn btn-default' href='/codes/51549'>Link</a>
```
public class ElvesTest {
public static void main(String[] args) {
Elf elf = new Elf("티란데", 100);
HighElf highElf = new HighElf("말퓨리온", 160, 100);
ElfLord elfLord = new ElfLord("마이에브", 230, 140, 100);
System.out.println(elf.toString());
System.out.println(highElf.toString());
System.out.println(elfLord.toString());
}
}
class Elf{
protected String name;
protected int hp;
public Elf(String name, int hp){
this.name = name;
this.hp = hp;
}
public String toString(){
return String.format("[엘프] Name: %s, HP: %d", this.name, this.hp);
}
}
class HighElf extends Elf{
protected int mp;
public HighElf(String name, int hp, int mp){
super(name, hp);
this.mp = mp;
}
public String toString(){
return String.format("[하이엘프] Name: %s, HP: %d, MP: %d", super.name, super.hp, this.mp);
}
}
class ElfLord extends HighElf{
protected int shield;
public ElfLord(String name, int hp, int mp, int shield){
super(name, hp, mp);
this.shield = shield;
}
public String toString(){
return String.format("[엘프로드] Name: %s, HP: %d, MP: %d, SH: %d", super.name, super.hp, super.mp, this.shield);
}
}
```
#### INPUT
```
```
#### OUPUT
```
[엘프] Name: 티란데, HP: 100
[하이엘프] Name: 말퓨리온, HP: 160, MP: 100
[엘프로드] Name: 마이에브, HP: 230, MP: 140, SH: 100
```
haesamq님의 답변
부모의 필드를 초기화하려면,
먼저 부모 영역을 만들어야 합니다.
따라서 다음 코드는 동작하지 않습니다.
```
자식 생성자() {
super.name = name;
super.hp = hp;
}
```
예시 코드를 수행하려면
다음과 같은 방법도 있겠으나,
부모 생성자에서 초기화 하는것이 바람직 합니다.
```
자식 생성자() {
super(); // 부모 영역 객체를 생성
super.name = name; // 부모의 필드를 초기화
super.hp = hp;
}
```
jminie님의 답변
감사합니다!!