ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쉽게 배우는 자바 프로그래밍 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();
    			}
    		}
    	}
    }

     

    반응형

    댓글

Designed by Tistory.