# 인터페이스와 다형성 #### CODE <a class='btn btn-default' href='/codes/41602'>Link</a> ``` public class Polymorphism { public static void main(String[] args) { // 성기사 객체 생성 HolyKnight uther = new HolyKnight("우서", 180); // 탱커로서의 역할 수행 uther.increaseHp(); // 힐러로서의 역할 수행 uther.heal(); } } interface Tanker { public void increaseHp(); } interface Healer { public void heal(); } /* 1. 탱커와 힐러 역할을 부여하세요. */ class HolyKnight implements Tanker, Healer{ private String name; private int hp; public HolyKnight(String name, int hp) { this.name = name; this.hp = hp; } /* 2. Tanker의 메소드를 오버라이딩하세요. */ public void increaseHp(){ System.out.println("전체 체력 +50 증가시킵니다."); } /* 3. Healer의 메소드를 오버라이딩하세요. */ public void heal(){ System.out.println("체력을 +30 회복합니다."); } } ``` #### INPUT ``` ``` #### OUPUT ``` 전체 체력 +50 증가시킵니다. 체력을 +30 회복합니다. ``` uther.increaseHP(); 로도 작동은 하지만 Tanker t = uther; t.increaseHP(); 로 코드를 작성하는 것은 코드의 가시성을 높히고 명확함을 주기위해서 라고 생각해도 괜찮을까요?
## 한 객체가 다양한 인터페이스로 해석될 수 있음을 나타내는데 목적이 있습니다. ## PS. uther 객체는 HolyKnight 객체입니다. HolyKnight는 Tanker와 Healer 인터페이스를 구현하고 있으므로, Tanker와 Healer 타입으로 해석될 수 있습니다. ``` // 성기사 객체 생성 HolyKnight uther = new HolyKnight("우서", 180); // 탱커로서의 역할 수행 - 업캐스팅 Tanker t = (Tanker) uther; t.increaseHp(); // 힐러로서의 역할 수행 - 업캐스팅 Healer h = (Healer) uther; h.heal(); ```