평생 소장! 19,800 원 15,000 원(계좌이체 구매 한정)


기업은행: 206-021800-01-029

예금주: 박세홍


카톡 ID: chaesam(카톡 아이디 검색 후, 문의 주세요!)

이메일: [email protected]

# 업 캐스팅 #### 부모 타입으로 해석하기 업 캐스팅이란, 자식 객체를 부모의 타입으로 해석하는 것입니다. 예를 들어 아래와 같은 상속 관계가 있을 때, ``` class Animal { ... } class Cat extends Animal { ... } class Dog extends Animal { ... } class Horse extends Animal { ... } ``` Cat의 인스턴스(객체)는, Animal로 해석 될 수 있습니다. ``` // 고양이 객체 생성 Cat c = new Cat(); // 고양이는 동물이다(O) Animal a = c; // 고양이 객체를 동물로 해석 ``` 하지만 위 내용의 역은 성립하지 않음을 주의하세요. ``` // 동물 객체 생성 Animal aaa = new Animal(); // 동물은 고양이다(X) Cat ccc = aaa; // ERROR! ``` #### 그룹화 이러한 업 캐스팅은, 다양한 객체들을 부모의 타입으로 관리할 수 있게 합니다. ``` Animal c = new Cat(); // 고양이는 동물이다 Animal d = new Dog(); // 개는 동물이다 Animal h = new Horse(); // 말은 동물이다 // 동물 배열 - 고양이, 개, 말 Animal[] animals = { c, d, h }; ``` ## 문제 주어진 코드는 Knight 및 Thief 클래스를 정의하고 있다. 두 클래스의 공통 요소를 추출하여 부모 클래스 Adventurer를 작성하고, 출력 예와 같은 결과를 얻으시오. ![클라우드스터딩-자바-부모-클래스-추출](https://i.imgur.com/wAtaKLp.png) ## 출력 예 ``` [아서스] HP: 180 [발리라] HP: 120 ```
관련 강의로 이동

코드: java 1.8

public class UpCasting { public static void main(String[] args) { // 기사 객체 생성 및 초기화 Knight knight = new Knight(); knight.name = "아서스"; knight.hp = 180; knight.strength = 50; // 도적 객체 생성 및 초기화 Thief thief = new Thief(); thief.name = "발리라"; thief.hp = 120; thief.agility = 40; // 업 캐스팅 - 부모 타입으로 객체를 해석 Adventurer adv0 = knight; Adventurer adv1 = thief; // 모험가들의 배열 생성 Adventurer[] advs = { adv0, adv1 }; // 모든 모험가의 정보 출력 for (int i = 0; i < advs.length; i++) { System.out.println(advs[i].toString()); } } } /* 1. 부모 클래스 Adventurer를 만드세요. */ class Adventurer { /* 1.1 공통 필드를 선언하세요. */ /* 1.2 공통 메소드를 작성하세요. */ } /* 2. Knight를 Adventurer의 자식 클래스로 정의하세요. */ class Knight { /* 2.1 부모와 중복된 필드를 제거하세요. */ String name; int hp; int strength; // 힘 /* 2.2 부모와 중복된 메소드를 제거하세요. */ public void punch() { System.out.printf("[%s]의 펀치!!\n", name); } public String toString() { return String.format("[%s] HP: %d", name, hp); } public void berserker() { System.out.println("체력과 공격력이 증가합니다."); } } /* 3. Thief를 Adventurer의 자식 클래스로 정의하세요. */ class Thief { /* 3.1 부모와 중복된 필드를 제거하세요. */ String name; int hp; int agility; // 민첩 /* 3.2 부모와 중복된 메소드를 제거하세요. */ public void punch() { System.out.printf("[%s]의 펀치!!\n", name); } public String toString() { return String.format("[%s] HP: %d", name, hp); } public void sharpen() { System.out.println("크리티컬 확률이 증가합니다."); } }

입력

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