# 연습문제 F - 상속과 인터페이스
## 15 상속
---
### 이론 요약
![클라우드스터딩-자바-상속-요약](https://i.imgur.com/jz371tX.png)
- 상속이란, 기존 클래스를 확장하여 새 클래스를 만드는 것이다.
- 상속을 사용하면, 중복된 코드를 줄일 수 있다.
- 상속은 코드의 재사용성 및 확장성을 증가시킨다.
- extends 키워드로 상속을 구현한다.
### 실습 리뷰
클래스 연속 확장하기
```
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 {
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", 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) {
super(name, hp, mp);
this.shield = shield;
}
public String toString() {
return String.format("[엘프로드] Name: %s, HP: %d, MP: %d, SH: %d", name, hp, mp, shield);
}
}
```
## 16 인터페이스
---
### 이론 요약
![클라우드스터딩-자바-인터페이스-요약](https://i.imgur.com/SwREgFf.png)
#### 인터페이스란
- 인터페이스란, 역할을 부여하는 것이다.
- 인터페이스는 추상 메소드로 구성된다.
- 추상 메소드란, 중괄호 내부가 없는 껍데기 메소드이다.
#### 인터페이스 정의 및 구현
- 인터페이스 구현 시, implements 키워드를 사용한다.
- 해당 인터페이스(역할)를 구현하는(부여받은) 클래스를 구현체 클래스라 한다.
- 구현체 클래스는 모든 추상 메소드를 오버라이딩(재정의)해야 한다.
#### 인터페이스의 장점
- 프로그램 설계의 명확성
- 서로 다른 객체에게 관계성 부여(업캐스팅 가능)
- 한 객체를 다양한 인터페이스로 해석 가능(다형성)
### 실습 리뷰
공통 인터페이스를 구현하는 서로 다른 객체
```
import java.util.ArrayList;
public class InterfaceReview {
public static void main(String[] args) {
// 객체 생성
Sounding dog = new Dog();
Sounding baby = new Baby();
Sounding tiger = new Tiger();
Sounding robot = new Robot();
// ArrayList를 통한 객체 저장
ArrayList<Sounding> list = new ArrayList<Sounding>();
list.add(dog);
list.add(baby);
list.add(tiger);
list.add(robot);
// 소리내기
for (int i = 0; i < list.size(); i++) {
list.get(i).sound();
}
}
}
interface Sounding {
public void sound();
}
class Dog implements Sounding {
public void sound() {
System.out.println("Dog: 멍멍!");
}
}
class Baby implements Sounding {
public void sound() {
System.out.println("Baby: 응애!");
}
}
class Tiger implements Sounding {
public void sound() {
System.out.println("Tiger: 어흥!");
}
}
class Robot implements Sounding {
public void sound() {
System.out.println("Robot: 삐빕!");
}
}
```
## 확인하기
---
<div class="interact_responsive_padding" style="padding:100% 0 0 0;position:relative;margin-bottom:5px;"><div class="interact_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><iframe id="interactApp5d36e8958105ff00146fc972" width="100%" height="100%" style="border:none;max-width:100%;margin:0;" allowTransparency="true" frameborder="0" src="https://quiz.tryinteract.com/#/5d36e8958105ff00146fc972/q/1?method=iframe"></iframe></div></div>
## 도서구매
<a href="http://www.yes24.com/Product/Goods/104740689"><img src="http://image.yes24.com/goods/104740689/XL" width="50%" /></a>