# 리뷰: 상속과-생성자-호출 이번 실습을 통해 배운 내용을 정리해봅시다. 1) extends 키워드를 사용하여 클래스를 확장할 수 있다. ``` // 기존 클래스 Parent class Parent { ... } // 확장 클래스 Child class Child extends Parent { ... } ``` 2) 상속을 통해 중복 코드를 줄일 수 있다. 3) 업 캐스팅(up-casting)이란, 객체를 부모의 타입으로 해석하는 것이다. ``` // 클래스 구성 class Animal { ... } class Cat extends Animal { ... } // 고양이 객체 생성 Cat cat = new Cat(); // 고양이는 동물이다(O) Animal a = cat; // 고양이 객체를 동물로 해석 ``` 4) 오버라이딩이란, 부모의 메소드를 자식에서 재정의하는 것이다. ``` class Wizard { public void fireball() { System.out.println("10 데미지를 줍니다"); } } class GreatWizard extends Wizard { public void fireball() { System.out.println("30 데미지를 줍니다"); } } ``` 5) protected는, 상속 관계 및 같은 패키지 내부 클래스에게 접근을 허용한다. | 접근 제한자 | 공개 범위 | |:------------:|:-----| | private | 비공개 | | default | 같은 패키지 내 공개 | | protected | 상속 관계 시 공개 + 같은 패키지 내 공개 | | public | 완전 공개 | 6) 자식 객체를 생성과 동시 초기화 하려면, 먼저 부모의 생성자가 호출되어야 한다. 이는 `super` 키워드를 통해 가능한다. ``` class Parent { protected int foo; public Parent(int foo) { this.foo = foo; } } class Child extends Parent { protected int bar; public Child(int foo, int bar) { super(foo); // Parent 클래스의 생성자 호출 this.bar = bar; } } ``` ## 문제 주어진 코드를 완성하여, 출력 예와 같은 결과를 얻으시오. ## 출력 예 ``` [엘프] Name: 티란데, HP: 100 [하이엘프] Name: 말퓨리온, HP: 160, MP: 100 [엘프로드] Name: 마이에브, HP: 230, MP: 140, SH: 100 ```
관련 강의로 이동

코드: java 1.8

public class ElvesTest { public static void main(String[] args) { // 객체 생성 Elf elf = new Elf("티란데", 100); HighElf high = new HighElf("말퓨리온", 160, 100); ElfLord lord = new ElfLord("마이에브", 230, 140, 100); // 객체 배열 생성 Elf[] elves = { elf, high, lord }; // 모든 객체 정보 출력 for (int i = 0; i < elves.length; i++) { System.out.println(elves[i].toString()); } } } class Elf { /* 1. 상속을 위한 접근 제한자를 사용하세요. */ private String name; private int hp; public Elf(String name, int hp) { this.name = name; this.hp = hp; } public String toString() { return String.format("[엘프] Name: %s, HP: %d", name, 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", name, hp, mp); } } class ElfLord extends HighElf { protected int shield; public ElfLord(String name, int hp, int mp, int shield) { /* 2. 부모의 생성자를 호출하세요. */ this.shield = shield; } /* 3. toString() 메소드를 오버라이딩(재정의) 하세요. */ }

입력

정답이 궁금하다면? 코드를 제출해보세요!