자바, 객체지향!

자바, 객체지향!

자바 프로그래밍의 꽃, 조립식 프로그래밍!

연습문제 F - 상속과 인터페이스

# 연습문제 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>

Challenge

개념 실습! 학습 내용을 진짜 내 것으로 만들기!