# 인터페이스와 다형성
#### 여러 역할 수행하기
하나의 클래스가 여러 개의 인터페이스를 구현할 수 있습니다.
![클라우드스터딩-자바-인터페이스-예](https://i.imgur.com/XB9GsHC.png)
예를 들어, 스마트폰(SmartPhone) 클래스에 알람(Alarm) 및 전화(Phone) 그리고 메신저(Messenger)의 역할을 동시에 부여하는 경우, <kbd>implements</kbd> 키워드 뒤쪽에 인터페이스들을 쉼표로 구분하여 적어주면 됩니다. 인터페이스를 구현하기로 선언하였다면, 반드시 프로토타입 메소드들을 오버라이딩해야 함을 잊지 마세요.
```
class SmartPhone implements Alarm, Phone, Messenger {
// 내부 생략..
}
```
이제 SmartPhone은 알람 및 전화기, 또는 메신저 타입으로 해석([업캐스팅](https://cloudstudying.kr/challenges/420))될 수 있습니다.
```
// 스마트폰 객체 생성
SmartPhone sp = new SmartPhone();
// 스마트폰을 다양하게 해석(업캐스팅 - 상위 타입으로 해석)
Alarm a = sp; // 스마트폰은 알람이다. (O)
Phone p = sp; // 스마트폰은 전화기이다. (O)
Messenger m = sp; // 스마트폰은 메신저이다 (O)
```
#### 다형성
이렇게 하나의 객체가 다양한 타입으로 해석되는 것을 다형성(Polymorphism)이라 합니다.
## 문제
주어진 코드의 두 인터페이스 Tanker와 Healer를 HolyKnight 클래스에 부여하고, 출력 예와 같은 결과를 얻도록 코드를 완성하시오.
## 출력 예
```
전체 체력 +50 증가시킵니다.
체력을 +30 회복합니다.
```