-
쉽게 배우는 자바 프로그래밍 2판 6장 도전문제JAVA/연습문제 2022. 10. 18. 10:42반응형
# 개발 공부하는 초보자가 작성한 답안이니 정답이 아닐 수 있습니다!!!
1. 다음와 같은 멤버를 가진 상속 관계의 클래스 3개를 명시적인 생성자 없이 작성해 보자.
📢주어진 값📢 Girl 클래스 String name; GoodGril 클래스 void show(); BestGril 클래스 void show();
1-1. 상속 관계를 가진 3개의 클래스를 작성한다. GoodGirl 클래스와 BestGirl 클래스의 show() 메서드는 각각 '그녀는 자바를 잘 안다.', '그녀는 자바를 무지하게 잘 안다.'를 출력하는 실행문만 포함한다.
🧤정답🧤 public class GoodGirl extends Girl { public void show() { System.out.println("그녀는 자바를 잘 안다."); } } public class BestGirl extends GoodGirl { public void show() { System.out.println("그녀는 자바를 무지하게 잘 안다."); } }
1-2. 다음과 같이 GirlTest 클래스를 작성한다.
📢주어진 값📢 public class GirlTest { public static void main(String[] args) { Girl g1 = new Girl(); Girl g2 = new GoodGirl(); GoodGirl gg = new BestGirl(); // g2.show(); gg.show(); } }
1-3. 메인 메서드의 7행 주석을 제거한 후 실행하면 오류가 발생하는데 원인을 살펴본다.
🧤정답🧤 public class Girl { String name; } public class GoodGirl extends Girl { public void show() { System.out.println("그녀는 자바를 잘 안다."); } } public class BestGirl extends GoodGirl { public void show() { System.out.println("그녀는 자바를 무지하게 잘 안다."); } } public class GirlTest { public static void main(String[] args) { Girl g1 = new Girl(); Girl g2 = new GoodGirl(); GoodGirl gg = new BestGirl(); // g2.show(); gg.show(); } } Girl이라는 클래스에는 show라는 메서드가 없기 때문에 오류가 발생한다. 즉 new라는 생성자를 통해 Goodgirl 클래스의 인스턴스를 생성 후 타입이 Gril 클래스 g2에 대입했기 때문에
1-4. 다시 주석 처리한 후 실행하고 다음 결과와 비교한다.
📢결과 값📢 그녀는 자바를 무지하게 잘 안다.
🧤정답🧤 그녀는 자바를 무지하게 잘 안다.
2. Girl 클래스와 자식 클래스에 다음 그림을 참고해서 Girl 클래스에만 생성자, private 필드, show() 메서드를 추가한 후 실행해 보자.
📢주어진 값📢 Girl 클래스 private String name; void show(); Girl(String name); GoodGril 클래스 void show(); BestGril 클래스 void show();
2-1. 그림과 같이 Girl 클래스와 자식 클래스를 수정 또는 추가한다. Girl 클래스의 show() 메서드는 단순히 '그녀는 자바 초보자이다.'를 출력하는 실행문만 포함한다.
🧤정답🧤 public class Girl { private String name; void show() { System.out.println("그녀는 자바 초보자이다."); } }
2-2. 그런데 Girl 클래스에 오류가 발생한다. Gril 클래스에 디폴트 생성자를 추가하면 오류가 사라지는지 살펴본다.
🧤정답🧤 오류가 사라진다. 처음 오류가 발생한 이유는 생성자를 호출할때 매개변수로 String 갑을 가져야 하지만, default 생성자에는 매개변수가 없기 때문에 가능하다.
2-3. GirlTest 클래스의 7행 주석을 제거한 후 실행하고 다음 결과와 비교한다.
📢주어진 출력값📢 그녀는 자바를 잘 안다. 그녀는 자바를 무지하게 잘 안다.
🧤정답🧤 public class GirlTest { public static void main(String[] args) { Girl g1 = new Girl(); Girl g2 = new GoodGirl(); GoodGirl gg = new BestGirl(); g2.show(); gg.show(); } }
3. 다음을 참고해 Girl 클래스의 필드에 대한 접근 범위를 변경하고 자식 클래스에도 생성자를 추가해보자.
📢주어진 값📢 Girl 클래스 protected String name; void show(); Girl(); -------------------> 제거 Girl(String name); GoodGril 클래스 void show(); GoodGirl(String name); BestGril 클래스 void show(); BestGirl(String name)
3-1. 그림과 같이 Girl 클래스와 자식 클래스를 수정한다. 그리고 GoodGirl 클래스와 BestGirl 클래스의 생성자는 다음 실행문을 포함하는 본체로 추가하며, 모든 show() 메서드의 실행 결과에서 '그녀는' 대신에 name이 출력되도록 수정한다.
📢주어진 값📢 super(name);
🧤정답🧤 public class BestGirl extends GoodGirl { public BestGirl(String name) { super(name); } public void show() { System.out.println(name + "는 자바를 무지하게 잘 안다."); } } public class GoodGirl extends Girl { public GoodGirl(String name) { super(name); } public void show() { System.out.println(name + "는 자바를 무지하게 잘 안다."); } }
3-2. GirlTest.java 코드의 메인 메서드 본체를 다음과 같이 수정하고 실행한다.
📢주어진 값📢 Girl[] girls = { new Girl("갑순이"), new GoodGirl("콩쥐"), new BestGirl("황진이") }; for (Girl g : girls) { g.show(); }
🧤정답🧤 public class BestGirl extends GoodGirl { public BestGirl(String name) { super(name); } public void show() { System.out.println("그녀는 자바를 무지하게 잘 안다."); } } public class GoodGirl extends Girl { public GoodGirl(String name) { super(name); } public void show() { System.out.println("그녀는 자바를 잘 안다."); } } public class Girl { protected String name; void show() { System.out.println("그녀는 자바 초보자이다."); } public Girl(String name) { } } public class GirlTest { public static void main(String[] args) { Girl[] girls = { new Girl("갑순이"), new GoodGirl("콩쥐"), new BestGirl("황진이") }; for (Girl g : girls) { g.show(); } } }
반응형'JAVA > 연습문제' 카테고리의 다른 글
쉽게 배우는 자바 프로그래밍 2판 6장 연습문제 Part.2 (6번 ~ 7번) (0) 2022.10.18 쉽게 배우는 자바 프로그래밍 2판 6장 연습문제 Part.1 (1번 ~ 5번) (0) 2022.10.18 쉽게 배우는 자바 프로그래밍 2판 5장 프로그래밍 문제 Part.2 (6~9번) (0) 2022.10.14 쉽게 배우는 자바 프로그래밍 2판 5장 프로그래밍 문제 Part.1 (1~5번) (0) 2022.10.13 쉽게 배우는 자바 프로그래밍 2판 5장 도전문제 (0) 2022.10.13