# 리뷰: 엘프의 연속 확장 자식 클래스 생성자를 생성할때 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 ```
부모의 필드를 초기화하려면, 먼저 부모 영역을 만들어야 합니다. 따라서 다음 코드는 동작하지 않습니다. ``` 자식 생성자() { super.name = name; super.hp = hp; } ``` 예시 코드를 수행하려면 다음과 같은 방법도 있겠으나, 부모 생성자에서 초기화 하는것이 바람직 합니다. ``` 자식 생성자() { super(); // 부모 영역 객체를 생성 super.name = name; // 부모의 필드를 초기화 super.hp = hp; } ```
감사합니다!!