-
쉽게 배우는 자바 프로그래밍 2판 7장 도전과제JAVA/연습문제 2022. 10. 19. 18:22반응형
# 개발 공부하는 초보자가 작성한 답안이니 정답이 아닐 수 있습니다!!!
1. count() 추상 메서드를 가진 Countable 인터페이스를 Bird 클래스와 Tree 클래스로 각각 구현해 보자.
1-1. Countable 인터페이스를 작성한다.
🧤정답🧤 public interface Countable { void count(); }
1-2. 그림과 같이 Bird와 Tree 클래스를 Countable 인터페이스의 구현 클래스로 작성한다.
📢주어진 값📢 class Bird implements Countable { String name; public Bird(String name) { // name을 초기화하는 코드 } // count()와 fly() 메서드를 위한 코드 } class Tree implements Countable { // Bird 클래스와 유사하다. }
🧤정답🧤 public class Bird implements Countable { String name; public Bird(String name) { // name을 초기화하는 코드 this.name = name; } // count()와 fly() 메서드를 위한 코드 void fly() { } @Override public void count() { System.out.println(name + "가 2마리 있다."); } } class Tree implements Countable { // Bird 클래스와 유사하다. String name; public Tree(String name) { // name을 초기화하는 코드 this.name = name; } void fly() { } @Override public void count() { System.out.println(name + "가 5그루 있다."); } }
1-3. 다음 테스트 프로그램으로 인터페이스와 2개의 구현 클래스를 테스트한다.
📢주어진 값📢 public class CountableTest { public static void main(String[] args) { Countable[] m = { new Bird("뻐꾸기"), new Bird("독수리"), new Tree("사과나무"), new Tree("밤나무")}; for (Countable e : m) { e.count(); } } } 📢주어진 출력값📢 뻐꾸기가 2마리 있다. 독수리가 2마리 있다. 사과나무가 5그루 있다. 밤나무가 5그루 있다.
🧤정답🧤 public interface Countable { void count(); } public class Bird implements Countable { String name; public Bird(String name) { // name을 초기화하는 코드 this.name = name; } void fly() { } // count()와 fly() 메서드를 위한 코드 @Override public void count() { System.out.println(name + "가 2마리 있다."); } } class Tree implements Countable { // Bird 클래스와 유사하다. String name; public Tree(String name) { // name을 초기화하는 코드 this.name = name; } void fly() { } @Override public void count() { System.out.println(name + "가 5그루 있다."); } } public class CountableTest { public static void main(String[] args) { Countable[] m = { new Bird("뻐꾸기"), new Bird("독수리"), new Tree("사과나무"), new Tree("밤나무") }; for (Countable e : m) { e.count(); } } }
2. 타입에 따라 다른 메서드를 호출하는 다형성을 테스트하는 코드를 테스트 프로그램에 추가해 보자. 즉 for 문 내부에서 Countable 배열의 원소가 Bird 타입이면 fly() 메서드를 호출하고, Tree 타입이면 ripen() 메서드를 호출한다.
📢주어진 값📢 public class CountableTest { public static void main(String[] args) { Countable[] m = { new Bird("뻐꾸기"), new Bird("독수리"), new Tree("사과나무"), new Tree("밤나무") }; for (Countable e : m) { e.count(); } for (int i = 0; i < m.length; i++) { // 타입에 따라 fly() 또는 ripen() 메서드를 호출하는 코드 } } }
🧤정답🧤 public interface Countable { void count(); void fly(); void ripen(); } public class Bird implements Countable { String name; public Bird(String name) { // name을 초기화하는 코드 this.name = name; } public void fly() { System.out.println("2마리 " + name + "가 날아간다."); } // count()와 fly() 메서드를 위한 코드 @Override public void count() { System.out.println(name + "가 2마리 있다."); } @Override public void ripen() { } } class Tree implements Countable { // Bird 클래스와 유사하다. String name; public Tree(String name) { // name을 초기화하는 코드 this.name = name; } public void ripen() { System.out.println(name + "에 열매가 잘 익었다."); } @Override public void count() { System.out.println(name + "가 5그루 있다."); } @Override public void fly() { } } public class CountableTest { public static void main(String[] args) { Countable[] m = { new Bird("뻐꾸기"), new Bird("독수리"), new Tree("사과나무"), new Tree("밤나무") }; for (Countable e : m) { e.count(); } for (int i = 0; i < m.length; i++) { // 타입에 따라 fly() 또는 ripen() 메서드를 호출하는 코드 if (m[i] instanceof Bird) { m[i].fly(); } else { m[i].ripen(); } } } }
3. 다음 그림과 같이 Countable 인터페이스를 추상 클래스로 바꾸고 소유자 필드도 추가해 보자.
3-1. Countable 인터페이스를 추상 클래스로 수정하되, 그림과 같이 name과 num 필드, 생성자를 추가한다.
🧤정답🧤 abstract class Countable { protected String name; protected int num; Countable(String name, int num) { this.name = name; this.num = num; } abstract public void count(); }
3-2. Countable 추상 클래스를 상속해 Bird와 Tree 클래스를 작성한다. 그리고 Bird와 Tree 클래스에 오류가 발생하면 수정한다.
🧤정답🧤 public class Bird extends Countable { public Bird(String name, int num) { super(name, num); } void fly() { System.out.println("2마리 " + name + "가 날아간다."); } // count()와 fly() 메서드를 위한 코드 @Override public void count() { System.out.println(name + "가 2마리 있다."); } } class Tree extends Countable { // Bird 클래스와 유사하다. public Tree(String name, int num) { super(name, num); } public void ripen() { System.out.println(name + "에 열매가 잘 익었다."); } @Override public void count() { System.out.println(name + "가 5그루 있다."); } }
3-3. Bird와 Tree 클래스의 count() 메서드, fly() 메서드에 num 정보를 포함한다. 그리고 CountableTest 프로그램도 num 정보에 맞게 수정한 후 다음 실행 결과가 나타나도록 완성한다.
📢주어진 결과값📢 뻐꾸기가 5마리 있다. 독수리가 2마리 있다. 사과나무가 10그루 있다. 밤나무가 7그루 있다. 5마리 뻐꾸기가 날아간다. 2마리 독수리가 날아간다. 10그루 사과나무에 열매가 잘 익었다. 7그루 밤나무에 열매가 잘 익었다.
🧤정답🧤 public class Bird extends Countable { public Bird(String name, int num) { super(name, num); } void fly() { System.out.println("2마리 " + name + "가 날아간다."); } // count()와 fly() 메서드를 위한 코드 @Override public void count() { System.out.println(name + "가 2마리 있다."); } } class Tree extends Countable { // Bird 클래스와 유사하다. public Tree(String name, int num) { super(name, num); } public void ripen() { System.out.println(name + "에 열매가 잘 익었다."); } @Override public void count() { System.out.println(name + "가 5그루 있다."); } } public class CountableTest { public static void main(String[] args) { Countable[] m = { new Bird("뻐꾸기", 5), new Bird("독수리", 2), new Tree("사과나무", 10), new Tree("밤나무", 7) }; for (Countable e : m) { e.count(); } for (int i = 0; i < m.length; i++) { // 타입에 따라 fly() 또는 ripen() 메서드를 호출하는 코드 if (m[i] instanceof Bird) { ((Bird) m[i]).fly(); } else { ((Tree) m[i]).ripen(); } } } }
반응형'JAVA > 연습문제' 카테고리의 다른 글
쉽게 배우는 자바 프로그래밍 2판 7장 연습문제 Part.2 (6번 ~ 11번) (0) 2022.10.20 쉽게 배우는 자바 프로그래밍 2판 7장 연습문제 Part.1 (1번 ~ 5번) (0) 2022.10.19 쉽게 배우는 자바 프로그래밍 2판 6장 프로그래밍 문제 (0) 2022.10.18 쉽게 배우는 자바 프로그래밍 2판 6장 연습문제 Part.2 (6번 ~ 7번) (0) 2022.10.18 쉽게 배우는 자바 프로그래밍 2판 6장 연습문제 Part.1 (1번 ~ 5번) (0) 2022.10.18