Chapter 객체지향프로그래밍 I Object-oriented Programming I

Similar documents
32 Java 의정석定石 2 판 - 연습문제풀이 Chapter 6 객체지향프로그래밍 I Object-oriented Programming I

java_jungsuk3_슰ì−µë¬¸ì€œì€—ì²´_ hwp

2 Java 의정석定石 2 판 - 연습문제풀이 안녕하십니까? Java 의정석의저자남궁성입니다. 요즘제가 Java예제를정리한 Java1000제를집필하고있는데요. Java의정석에연습문제가있었으면좋겠다는독자분들의요청을많이받았습니다. 그래서 Java1000제의일부를연습문제로만

PowerPoint Presentation

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - 2강

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

gnu-lee-oop-kor-lec06-3-chap7

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JAVA PROGRAMMING 실습 02. 표준 입출력

5장.key

금오공대 컴퓨터공학전공 강의자료

비긴쿡-자바 00앞부속

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

슬라이드 1

PowerPoint 프레젠테이션

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

PowerPoint Presentation

PowerPoint Presentation

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 05. 객체의 활용

Design Issues

JVM 메모리구조

PowerPoint Presentation

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Lect04.pptx

PowerPoint Presentation

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

슬라이드 1

TEST BANK & SOLUTION

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Microsoft PowerPoint - additional01.ppt [호환 모드]

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

KNK_C_05_Pointers_Arrays_structures_summary_v02

PowerPoint 프레젠테이션

PowerPoint Presentation

09-interface.key

설계란 무엇인가?

JAVA PROGRAMMING 실습 02. 표준 입출력

자바 프로그래밍

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft Word - java19-1-midterm-answer.doc

JAVA PROGRAMMING 실습 07. 상속

Microsoft PowerPoint - chap06-2pointer.ppt

슬라이드 1

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - C++ 5 .pptx

01-OOPConcepts(2).PDF

Microsoft PowerPoint - CSharp-10-예외처리

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

C++ Programming

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - additional06.ppt [호환 모드]

PowerPoint Presentation

05-class.key

슬라이드 1

쉽게

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

11장 포인터

PowerPoint Template

PowerPoint 프레젠테이션

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint Presentation

No Slide Title

PowerPoint Presentation

Microsoft PowerPoint 장강의노트.ppt

슬라이드 1

02 C h a p t e r Java

Microsoft PowerPoint - chap10-함수의활용.pptx

제11장 프로세스와 쓰레드

PowerPoint 프레젠테이션

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

Microsoft PowerPoint - 14주차 강의자료

No Slide Title

PowerPoint 프레젠테이션

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

쉽게 풀어쓴 C 프로그래밍

Transcription:

Chapter 객체지향프로그래밍 I Object-oriented Programming I

[ 연습문제 ] [6-1] 다음과같은멤버변수를갖는 SutdaCard 클래스를정의하시오. 타입 변수명 설명 int num 카드의숫자.(1~10 사이의 정수 ) boolean iskwang 광 ( 光 ) 이면 true, 아니면 false [6-2] 문제 6-1 에서정의한 SutdaCard 클래스에두개의생성자와 info() 를추가해서 실행결과와같은결과를얻도록하시오. [ 연습문제 ]/ch6/exercise6_2.java class Exercise6_2 { public static void main(string args[]) { SutdaCard card1 = new SutdaCard(3, false); SutdaCard card2 = new SutdaCard(); System.out.println(card1.info()); System.out.println(card2.info()); class SutdaCard { (1) 알맞은코드를넣어완성하시오. 3 1K [6-3] 다음과같은멤버변수를갖는 Student 클래스를정의하시오. 타입 변수명 설명 String name 학생이름 int ban 반 int no 번호 int kor 국어점수 int eng 영어점수 int math 수학점수

35 [6-4] 문제 6-3 에서정의한 Student 클래스에다음과같이정의된두개의메서드 gettotal() 과 getaverage() 를추가하시오. 1. 메서드명 : gettotal 기능 : 국어 (kor), 영어 (eng), 수학 (math) 의점수를모두더해서반환한다. 반환타입 : int 매개변수 : 없음 2. 메서드명 : getaverage 기능 : 총점 ( 국어점수 + 영어점수 + 수학점수 ) 을과목수로나눈평균을구한다. 소수점둘째자리에서반올림할것. 반환타입 : float 매개변수 : 없음 [ 연습문제 ]/ch6/exercise6_4.java class Exercise6_4 { public static void main(string args[]) { Student s = new Student(); s.name = " 홍길동 "; s.ban = 1; s.no = 1; s.kor = 100; s.eng = 60; s.math = 76; System.out.println(" 이름 :"+s.name); System.out.println(" 총점 :"+s.gettotal()); System.out.println(" 평균 :"+s.getaverage()); class Student { (1) 알맞은코드를넣어완성하시오. 이름 : 홍길동총점 :236 평균 :78.7

36 [6-5] 다음과같은실행결과를얻도록 Student 클래스에생성자와 info() 를추가하시오. [ 연습문제 ]/ch6/exercise6_5.java class Exercise6_5 { public static void main(string args[]) { Student s = new Student(" 홍길동 ",1,1,100,60,76); System.out.println(s.info()); class Student { (1) 알맞은코드를넣어완성하시오. 홍길동,1,1,100,60,76,236,78.7 [6-6] 두점의거리를계산하는 getdistance() 를완성하시오. [Hint] 제곱근계산은 Math.sqrt(double a) 를사용하면된다. [ 연습문제 ]/ch6/exercise6_6.java class Exercise6_6 { // 두점 (x,y) 와 (x1,y1) 간의거리를구한다. static double getdistance(int x, int y, int x1, int y1) { (1) 알맞은코드를넣어완성하시오. public static void main(string args[]) { System.out.println(getDistance(1,1,2,2) ); 1.4142135623730951

37 [6-7] 문제 6-6 에서작성한클래스메서드 getdistance() 를 MyPoint 클래스의 인스턴스메서드로정의하시오. [ 연습문제 ]/ch6/exercise6_7.java class MyPoint { int x; int y; MyPoint(int x, int y) { this.x = x; this.y = y; (1) 인스턴스메서드 getdistance 를작성하시오. class Exercise6_7 { public static void main(string args[]) { MyPoint p = new MyPoint(1,1); // p 와 (2,2) 의거리를구한다. System.out.println(p.getDistance(2,2)); 1.4142135623730951 [6-8] 다음의코드에정의된변수들을종류별로구분해서적으시오. class PlayingCard { int kind; int num; static int width; static int height; PlayingCard(int k, int n) { kind = k; num = n; public static void main(string args[]) { PlayingCard card = new PlayingCard(1,1); - 클래스변수 (static 변수 ) : - 인스턴스변수 : - 지역변수 :

38 [6-9] 다음은컴퓨터게임의병사 (marine) 를클래스로정의한것이다. 이클래스의멤버 중에 static 을붙여야하는것은어떤것들이고그이유는무엇인가? ( 단, 모든병사의공격력과방어력은같아야한다.) class Marine { int x=0, y=0; // Marine 의위치좌표 (x,y) int hp = 60; // 현재체력 int weapon = 6; // 공격력 int armor = 0; // 방어력 void weaponup() { weapon++; void armorup() { armor++; void move(int x, int y) { this.x = x; this.y = y; [6-10] 다음중생성자에대한설명으로옳지않은것은? ( 모두고르시오 ) a. 모든생성자의이름은클래스의이름과동일해야한다. b. 생성자는객체를생성하기위한것이다. c. 클래스에는생성자가반드시하나이상있어야한다. d. 생성자가없는클래스는컴파일러가기본생성자를추가한다. e. 생성자는오버로딩할수없다. [6-11] 다음중 this 에대한설명으로맞지않은것은? ( 모두고르시오 ) a. 객체자신을가리키는참조변수이다. b. 클래스내에서라면어디서든사용할수있다. c. 지역변수와인스턴스변수를구별할때사용한다. d. 클래스메서드내에서는사용할수없다. [6-12] 다음중오버로딩이성립하기위한조건이아닌것은? ( 모두고르시오 ) a. 메서드의이름이같아야한다. b. 매개변수의개수나타입이달라야한다. c. 리턴타입이달라야한다. d. 매개변수의이름이달라야한다.

39 [6-13] 다음중아래의 add 메서드를올바르게오버로딩한것은? ( 모두고르시오 ) long add(int a, int b) { return a+b; a. long add(int x, int y) { return x+y; b. long add(long a, long b) { return a+b; c. int add(byte a, byte b) { return a+b; d. int add(long a, int b) { return (int)(a+b); [6-14] 다음중초기화에대한설명으로옳지않은것은? ( 모두고르시오 ) a. 멤버변수는자동초기화되므로초기화하지않고도값을참조할수있다. b. 지역변수는사용하기전에반드시초기화해야한다. c. 초기화블럭보다생성자가먼저수행된다. d. 명시적초기화를제일우선적으로고려해야한다. e. 클래스변수보다인스턴스변수가먼저초기화된다. [6-15] 다음중인스턴스변수의초기화순서가올바른것은? a. 기본값-명시적초기화-초기화블럭-생성자 b. 기본값-명시적초기화-생성자-초기화블럭 c. 기본값-초기화블럭-명시적초기화-생성자 d. 기본값-초기화블럭-생성자-명시적초기화 [6-16] 다음중지역변수에대한설명으로옳지않은것은? ( 모두고르시오 ) a. 자동초기화되므로별도의초기화가필요없다. b. 지역변수가선언된메서드가종료되면지역변수도함께소멸된다. c. 매서드의매개변수로선언된변수도지역변수이다. d. 클래스변수나인스턴스변수보다메모리부담이적다. e. 힙 (heap) 영역에생성되며가비지컬렉터에의해소멸된다. [6-17] 호출스택이다음과같은상황일때옳지않은설명은? ( 모두고르시오 ) println method1 method2 main a. 제일먼저호출스택에저장된것은 main 메서드이다. b. println 메서드를제외한나머지메서드들은모두종료된 상태이다. c. method2 메서드를호출한것은 main 메서드이다. d. println 메서드가종료되면 method1 메서드가수행을재개한다. e. main-method2-method1-println 의순서로 호출되었다. f. 현재실행중인메서드는 println 뿐이다.

40 [6-18] [6-20] 다음의다음과코드를같이컴파일하면정의된메서드를에러가작성하고발생한다. 테스트하시오컴파일에러가. 발생하는라인과그 이유를설명하시오. class MemberCall { int iv = 10; static int cv = 20; int iv2 = cv; static int cv2 = iv; // 라인 A static void staticmethod1() { System.out.println(cv); System.out.println(iv); // 라인 B void instancemethod1() { System.out.println(cv); System.out.println(iv); // 라인 C static void staticmethod2() { staticmethod1(); void instancemethod2() { staticmethod1(); instancemethod1(); // 라인 E [6-19] 다음코드의실행결과를예측하여적으시오. [ 연습문제 ]/ch6/exercise6_19.java class Exercise6_19 { public static void change(string str) { str += "456"; public static void main(string[] args) { String str = "ABC123"; System.out.println(str); change(str); System.out.println("After change:"+str);

41 [6-20] 다음과같이정의된메서드를작성하고테스트하시오. [ 주의 ] Math.random() 을사용하는경우실행결과와다를수있음. 메서드명 : shuffle 기능 : 주어진배열에담긴값의위치를바꾸는작업을반복하여뒤섞이게한다. 처리한배열을반환한다. 반환타입 : int[] 매개변수 : int[] arr - 정수값이담긴배열 [ 연습문제 ]/ch6/exercise6_20.java class Exercise6_20 { (1) shuffle 메서드를작성하시오. public static void main(string[] args) { int[] original = {1,2,3,4,5,6,7,8,9; System.out.println(java.util.Arrays.toString(original)); int[] result = shuffle(original); System.out.println(java.util.Arrays.toString(result)); [1, 2, 3, 4, 5, 6, 7, 8, 9] [4, 6, 8, 3, 2, 9, 7, 1, 5] [6-21] Tv 클래스를주어진로직대로완성하시오. 완성한후에실행해서주어진실행결과 와일치하는지확인하라. [ 참고 ] 코드를단순히하기위해서유효성검사는로직에서제외했다. [ 연습문제 ]/ch6/exercise6_21.java class MyTv { boolean ispoweron; int channel; int volume; final int MAX_VOLUME = 100; final int MIN_VOLUME = 0; final int MAX_CHANNEL = 100; final int MIN_CHANNEL = 1; void turnonoff() { // (1) ispoweron 의값이 true 면 false 로, false 면 true 로바꾼다.

42 [6-20] 다음과같이정의된메서드를작성하고테스트하시오. void volumeup() { // (2) volume 의값이 MAX_VOLUME 보다작을때만값을 1 증가시킨다. void volumedown() { // (3) volume 의값이 MIN_VOLUME 보다클때만값을 1 감소시킨다. void channelup() { // (4) channel 의값을 1 증가시킨다. // 만일 channel 이 MAX_CHANNEL 이면, channel 의값을 MIN_CHANNEL 로바꾼다. void channeldown() { // (5) channel 의값을 1 감소시킨다. // 만일 channel 이 MIN_CHANNEL 이면, channel 의값을 MAX_CHANNEL 로바꾼다. // class MyTv class Exercise6_21 { public static void main(string args[]) { MyTv t = new MyTv(); t.channel = 100; t.volume = 0; System.out.println("CH:"+t.channel+", VOL:"+ t.volume); t.channeldown(); t.volumedown(); System.out.println("CH:"+t.channel+", VOL:"+ t.volume); t.volume = 100; t.channelup(); t.volumeup(); System.out.println("CH:"+t.channel+", VOL:"+ t.volume); CH:100, VOL:0 CH:99, VOL:0 CH:100, VOL:100

43 [6-22] 다음과같이정의된메서드를작성하고테스트하시오. 메서드명 : isnumber 기능 : 주어진문자열이모두숫자로만이루어져있는지확인한다. 모두숫자로만이루어져있으면 true 를반환하고, 그렇지않으면 false 를반환한다. 만일주어진문자열이 null 이거나빈문자열 이라면 false 를반환한다. 반환타입 : boolean 매개변수 : String str - 검사할문자열 [Hint] String 클래스의 charat(int i) 메서드를사용하면문자열의 i 번째위치한문자를얻을수있다. [ 연습문제 ]/ch6/exercise6_22.java class Exercise6_22 { (1) isnumber 메서드를작성하시오. public static void main(string[] args) { String str = "123"; System.out.println(str+" 는숫자입니까? "+isnumber(str)); str = "1234o"; System.out.println(str+" 는숫자입니까? "+isnumber(str)); 123 는숫자입니까? true 1234o 는숫자입니까? false [6-23] 다음과같이정의된메서드를작성하고테스트하시오. 메서드명 : max 기능 : 주어진 int 형배열의값중에서제일큰값을반환한다. 만일주어진배열이 null 이거나크기가 0 인경우, -999999 를반환한다. 반환타입 : int 매개변수 : int[] arr - 최대값을구할배열 [ 연습문제 ]/ch6/exercise6_23.java class Exercise6_23{ (1) max 메서드를작성하시오.

44 [6-22] 다음과같이정의된메서드를작성하고테스트하시오. public static void main(string[] args) { int[] data = {3,2,9,4,7; System.out.println(java.util.Arrays.toString(data)); System.out.println(" 최대값 :"+max(data)); System.out.println(" 최대값 :"+max(null)); System.out.println(" 최대값 :"+max(new int[]{)); // 크기가 0 인배열 [3, 2, 9, 4, 7] 최대값 :9 최대값 :-999999 최대값 :-999999 [6-24] 다음과같이정의된메서드를작성하고테스트하시오. 메서드명 : abs 기능 : 주어진값의절대값을반환한다. 반환타입 : int 매개변수 : int value [ 연습문제 ]/ch6/exercise6_24.java class Exercise6_24 { (1) abs 메서드를작성하시오. public static void main(string[] args) { int value = 5; System.out.println(value+" 의절대값 :"+abs(value)); value = -10; System.out.println(value+" 의절대값 :"+abs(value)); 5 의절대값 :5-10 의절대값 :10

45 Chapter 객체지향프로그래밍 II Object-oriented Programming II

[ 연습문제 ] [7-1] 섯다카드 20 장을포함하는섯다카드한벌 (SutdaDeck 클래스 ) 을정의한것이다. 섯다카드 20 장을담는 SutdaCard 배열을초기화하시오. 단, 섯다카드는 1 부터 10 까지의숫자가적힌카드가한쌍씩있고, 숫자가 1, 3, 8 인경우에는둘중의한장은광 (Kwang) 이어야한다. 즉, SutdaCard 의인스턴스변수 iskwang 의값이 true 이어야한다. [ 연습문제 ]/ch7/exercise7_1.java class SutdaDeck { final int CARD_NUM = 20; SutdaCard[] cards = new SutdaCard[CARD_NUM]; SutdaDeck() { (1) 배열 SutdaCard 를적절히초기화하시오. class SutdaCard { int num; boolean iskwang; SutdaCard() { this(1, true); SutdaCard(int num, boolean iskwang) { this.num = num; this.iskwang = iskwang; // info() 대신 Object 클래스의 tostring() 을오버라이딩했다. public String tostring() { return num + ( iskwang? "K":""); class Exercise7_1 { public static void main(string args[]) { SutdaDeck deck = new SutdaDeck(); for(int i=0; i < deck.cards.length;i++) System.out.print(deck.cards[i]+","); 1K,2,3K,4,5,6,7,8K,9,10,1,2,3,4,5,6,7,8,9,10,

47 [7-2] 문제 7-1 의 SutdaDeck 클래스에다음에정의된새로운메서드를추가하고테스트 하시오. [ 주의 ] Math.random() 을사용하는경우실행결과와다를수있음. 1. 메서드명 : shuffle 기능 : 배열 cards 에담긴카드의위치를뒤섞는다.(Math.random() 사용 ) 반환타입 : 없음매개변수 : 없음 2. 메서드명 : pick 기능 : 배열 cards 에서지정된위치의 SutdaCard 를반환한다. 반환타입 : SutdaCard 매개변수 : int index - 위치 3. 메서드명 : pick 기능 : 배열 cards 에서임의의위치의 SutdaCard 를반환한다.(Math.random() 사용 ) 반환타입 : SutdaCard 매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_2.java class SutdaDeck { final int CARD_NUM = 20; SutdaCard[] cards = new SutdaCard[CARD_NUM]; SutdaDeck() { 문제 7-1 의답이므로내용생략 (1) 위에정의된세개의메서드를작성하시오. // SutdaDeck class SutdaCard { int num; boolean iskwang; SutdaCard() { this(1, true); SutdaCard(int num, boolean iskwang) { this.num = num; this.iskwang = iskwang;

48 return num + ( iskwang? "K":""); class Exercise7_2 { public static void main(string args[]) { SutdaDeck deck = new SutdaDeck(); System.out.println(deck.pick(0)); System.out.println(deck.pick()); deck.shuffle(); for(int i=0; i < deck.cards.length;i++) System.out.print(deck.cards[i]+","); System.out.println(); System.out.println(deck.pick(0)); 1K 7 2,6,10,1K,7,3,10,5,7,8,5,1,2,9,6,9,4,8K,4,3K, 2 [7-3] 오버라이딩의정의와필요성에대해서설명하시오. [7-4] 다음중오버라이딩의조건으로옳지않은것은? ( 모두고르시오 ) a. 조상의메서드와이름이같아야한다. b. 매개변수의수와타입이모두같아야한다. c. 접근제어자는조상의메서드보다좁은범위로만변경할수있다. d. 조상의메서드보다더많은수의예외를선언할수있다.

49 [7-5] 다음의코드는컴파일하면에러가발생한다. 그이유를설명하고에러를수정하기 위해서는코드를어떻게바꾸어야하는가? [ 연습문제 ]/ch7/exercise7_5.java class Product { int price; // 제품의가격 int bonuspoint; // 제품구매시제공하는보너스점수 Product(int price) { this.price = price; bonuspoint =(int)(price/10.0); class Tv extends Product { Tv() { public String tostring() { return "Tv"; class Exercise7_5 { public static void main(string[] args) { Tv t = new Tv(); [7-6] 자손클래스의생성자에서조상클래스의생성자를호출해야하는이유는무엇인 가?

50 [7-7] 다음코드의실행했을때호출되는생성자의순서와실행결과를적으시오. [ 연습문제 ]/ch7/exercise7_7.java class Parent { int x=100; Parent() { this(200); Parent(int x) { this.x = x; int getx() { return x; class Child extends Parent { int x = 3000; Child() { this(1000); Child(int x) { this.x = x; class Exercise7_7 { public static void main(string[] args) { Child c = new Child(); System.out.println("x="+c.getX());

51 [7-8] 다음중접근제어자를접근범위가넓은것에서좁은것의순으로바르게나열한것은? a. public-protected-(default)-private b. public-(default)-protected-private c. (default)-public-protected-private d. private-protected-(default)-public [7-9] 다음중제어자 final 을붙일수있는대상과붙였을때그의미를적은것이다. 옳지않은것은? ( 모두고르시오 ) a. 지역변수 - 값을변경할수없다. b. 클래스 - 상속을통해클래스에새로운멤버를추가할수없다. c. 메서드 - 오버로딩을할수없다. d. 멤버변수 - 값을변경할수없다. [7-10] MyTv2 클래스의멤버변수 ispoweron, channel, volume 을클래스외부에서접근할 수없도록제어자를붙이고대신이멤버변수들의값을어디서나읽고변경할수있도록 getter 와 setter 메서드를추가하라. [ 연습문제 ]/ch7/exercise7_10.java class MyTv2 { boolean ispoweron; int channel; int volume; final int MAX_VOLUME = 100; final int MIN_VOLUME = 0; final int MAX_CHANNEL = 100; final int MIN_CHANNEL = 1; (1) 알맞은코드를넣어완성하시오. class Exercise7_10 { public static void main(string args[]) { MyTv2 t = new MyTv2(); t.setchannel(10); System.out.println("CH:"+t.getChannel()); t.setvolume(20); System.out.println("VOL:"+t.getVolume()); CH:10 VOL:20

52 [7-11] 문제 7-10 에서작성한 MyTv2 클래스에이전채널 (previous channel) 로이동하는 기능의메서드를추가해서실행결과와같은결과를얻도록하시오. [Hint] 이전채널의값을저장할멤버변수를정의하라. 메서드명 : gotoprevchannel 기능 : 현재채널을이전채널로변경한다. 반환타입 : 없음매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_11.java class MyTv2 { (1) 문제 7-10 의 MyTv2 클래스에 gotoprevchannel 메서드를추가하여완성하시오. class Exercise7_11 { public static void main(string args[]) { MyTv2 t = new MyTv2(); t.setchannel(10); System.out.println("CH:"+t.getChannel()); t.setchannel(20); System.out.println("CH:"+t.getChannel()); t.gotoprevchannel(); System.out.println("CH:"+t.getChannel()); t.gotoprevchannel(); System.out.println("CH:"+t.getChannel()); CH:10 CH:20 CH:10 CH:20 [7-12] 다음중접근제어자에대한설명으로옳지않은것은? ( 모두고르시오 ) a. public 은접근제한이전혀없는접근제어자이다. b. (default) 가붙으면, 같은패키지내에서만접근이가능하다. c. 지역변수에도접근제어자를사용할수있다. d. protected 가붙으면, 같은패키지내에서도접근이가능하다. e. protected 가붙으면, 다른패키지의자손클래스에서접근이가능하다. [7-13] Math 클래스의생성자는접근제어자가 private 이다. 그이유는무엇인가?

53 [7-14] 문제 7-1 에나오는섯다카드의숫자와종류 (iskwang) 는사실한번값이지정되면 변경되어서는안되는값이다. 카드의숫자가한번잘못바뀌면똑같은카드가두 될수도있기때문이다. 이러한문제점이발생하지않도록아래의 SutdaCard 를 수정하시오. [ 연습문제 ]/ch7/exercise7_14.java class SutdaCard { int num; boolean iskwang; SutdaCard() { this(1, true); SutdaCard(int num, boolean iskwang) { this.num = num; this.iskwang = iskwang; 장이 public String tostring() { return num + ( iskwang? "K":""); class Exercise7_14 { public static void main(string args[]) { SutdaCard card = new SutdaCard(1, true); [7-15] 클래스가다음과같이정의되어있을때, ( 모두고르시오.) 형변환을올바르게하지않은것은? class Unit { class AirUnit extends Unit { class GroundUnit extends Unit { class Tank extends GroundUnit { class AirCraft extends AirUnit { Unit u = new GroundUnit(); Tank t = new Tank(); AirCraft ac = new AirCraft(); a. u = (Unit)ac; b. u = ac; c. GroundUnit gu = (GroundUnit)u; d. AirUnit au = ac; e. t = (Tank)u; f. GroundUnit gu = t;

54 [7-16] 다음중연산결과가 true 가아닌것은? ( 모두고르시오 ) class Car { class FireEngine extends Car implements Movable { class Ambulance extends Car { FireEngine fe = new FireEngine(); a. fe instanceof FireEngine b. fe instanceof Movable c. fe instanceof Object d. fe instanceof Car e. fe instanceof Ambulance [7-17] 아래세개의클래스로부터공통부분을뽑아서 Unit 이라는클래스를만들고, 이 클래스를상속받도록코드를변경하시오. class Marine { // 보병 int x, y; // 현재위치 void move(int x, int y) { 지정된위치로이동 void stop() { 현재위치에정지 void stimpack() { 스팀팩을사용한다. class Tank { // 탱크 int x, y; // 현재위치 void move(int x, int y) { 지정된위치로이동 void stop() { 현재위치에정지 void changemode() { 공격모드를변환한다. class Dropship { // 수송선 int x, y; // 현재위치 void move(int x, int y) { 지정된위치로이동 void stop() { 현재위치에정지 void load() { 선택된대상을태운다. void unload() { 선택된대상을내린다.

55 [7-18] 다음과같은실행결과를얻도록코드를완성하시오. [Hint] instanceof 연산자를사용해서형변환한다. 메서드명 : action 기능 : 주어진객체의메서드를호출한다. DanceRobot 인경우, dance() 를호출하고, SingRobot 인경우, sing() 을호출하고, DrawRobot 인경우, draw() 를호출한다. 반환타입 : 없음매개변수 : Robot r - Robot 인스턴스또는 Robot 의자손인스턴스 [ 연습문제 ]/ch7/exercise7_18.java class Exercise7_18 { (1) action 메서드를작성하시오. public static void main(string[] args) { Robot[] arr = { new DanceRobot(), new SingRobot(), new DrawRobot(); for(int i=0; i< arr.length;i++) action(arr[i]); // main class Robot { class DanceRobot extends Robot { void dance() { System.out.println(" 춤을춥니다."); class SingRobot extends Robot { void sing() { System.out.println(" 노래를합니다."); class DrawRobot extends Robot { void draw() { System.out.println(" 그림을그립니다."); 춤을춥니다. 노래를합니다. 그림을그립니다.

56 [7-19] 다음은물건을구입하는사람을정의한 Buyer 클래스이다. 이클래스는멤버변수 로돈 (money) 과장바구니 (cart) 를가지고있다. 제품을구입하는기능의 buy 메서드와장 바구니에구입한물건을추가하는 add 메서드, 구입한물건의목록과사용금액, 그리고 남은금액을출력하는 summary 메서드를완성하시오. 1. 메서드명 : buy 기능 : 지정된물건을구입한다. 가진돈 (money) 에서물건의가격을빼고, 장바구니 (cart) 에담는다. 만일가진돈이물건의가격보다적다면바로종료한다. 반환타입 : 없음매개변수 : Product p - 구입할물건 2. 메서드명 : add 기능 : 지정된물건을장바구니에담는다. 만일장바구니에담을공간이없으면, 장바구니의크기를 2 배로늘린다음에담는다. 반환타입 : 없음매개변수 : Product p - 구입할물건 3. 메서드명 : summary 기능 : 구입한물건의목록과사용금액, 남은금액을출력한다. 반환타입 : 없음매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_19.java class Exercise7_19 { public static void main(string args[]) { Buyer b = new Buyer(); b.buy(new Tv()); b.buy(new Computer()); b.buy(new Tv()); b.buy(new Audio()); b.buy(new Computer()); b.buy(new Computer()); b.buy(new Computer()); b.summary(); class Buyer { int money = 1000; Product[] cart = new Product[3]; // 구입한제품을저장하기위한 배열 int i = 0; // Product 배열 cart 에사용될 index void buy(product p) { (1) 아래의로직에맞게코드를작성하시오. 1.1 가진돈과물건의가격을비교해서가진돈이적으면메서드를종료한다. 1.2 가진돈이충분하면, 제품의가격을가진돈에서빼고 1.3 장바구니에구입한물건을담는다.(add 메서드호출 )

57 void add(product p) { (2) 아래의로직에맞게코드를작성하시오. 1.1 i 의값이장바구니의크기보다같거나크면 1.1.1 기존의장바구니보다 2 배큰새로운배열을생성한다. 1.1.2 기존의장바구니의내용을새로운배열에복사한다. 1.1.3 새로운장바구니와기존의장바구니를바꾼다. 1.2 물건을장바구니 (cart) 에저장한다. 그리고 i 의값을 1 증가시킨다. // add(product p) void summary() { (3) 아래의로직에맞게코드를작성하시오. 1.1 장바구니에담긴물건들의목록을만들어출력한다. 1.2 장바구니에담긴물건들의가격을모두더해서출력한다. 1.3 물건을사고남은금액 (money) 를출력한다. // summary() class Product { int price; // 제품의가격 Product(int price) { this.price = price; class Tv extends Product { Tv() { super(100); public String tostring() { return "Tv"; class Computer extends Product { Computer() { super(200); public String tostring() { return "Computer"; class Audio extends Product { Audio() { super(50); public String tostring() { return "Audio"; 잔액이부족하여 Computer 을 / 를살수없습니다. 구입한물건 :Tv,Computer,Tv,Audio,Computer,Computer, 사용한금액 :850 남은금액 :150

58 [7-20] 다음의코드를실행한결과를적으시오. [ 연습문제 ]/ch7/exercise7_20.java class Exercise7_20 { public static void main(string[] args) { Parent p = new Child(); Child c = new Child(); System.out.println("p.x = " + p.x); p.method(); System.out.println("c.x = " + c.x); c.method(); class Parent { int x = 100; void method() { System.out.println("Parent Method"); class Child extends Parent { int x = 200; void method() { System.out.println("Child Method"); [7-21] 다음과같이 attack 메서드가정의되어있을때, 이메서드의매개변수로가능한 것두가지를적으시오. interface Movable { void move(int x, int y); void attack(movable f) { 내용생략

59 [7-22] 아래는도형을정의한 Shape 클래스이다. 이클래스를조상으로하는 Circle 클래스와 Rectangle 클래스를작성하시오. 이때, 생성자도각클래스에맞게적절히추가해야한다. (1) 클래스명 : Circle 조상클래스 : Shape 멤버변수 : double r - 반지름 (2) 클래스명 : Rectangle 조상클래스 : Shape 멤버변수 : double width - 폭 double height - 높이메서드 : 1. 메서드명 : issquare 기능 : 정사각형인지아닌지를알려준다. 반환타입 : boolean 매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_22.java abstract class Shape { Point p; Shape() { this(new Point(0,0)); Shape(Point p) { this.p = p; abstract double calcarea(); // 도형의면적을계산해서반환하는메서드 Point getposition() { return p; void setposition(point p) { this.p = p; class Point { int x; int y; Point() { this(0,0); Point(int x, int y) { this.x=x;

60 public String tostring() { return "["+x+","+y+"]"; [7-23] 문제 7-22 에서정의한클래스들의면적을구하는메서드를작성하고테스트하시 오. 1. 메서드명 : sumarea 기능 : 주어진배열에담긴도형들의넓이를모두더해서반환한다. 반환타입 : double 매개변수 : Shape[] arr [ 연습문제 ]/ch7/exercise7_23.java class Exercise7_23 { (1) sumarea 메서드를작성하시오. public static void main(string[] args) { Shape[] arr = {new Circle(5.0), new Rectangle(3,4), new Circle(1); System.out.println(" 면적의합 :"+sumarea(arr)); 면적의합 :93.68140899333463 [7-24] 다음중인터페이스의장점이아닌것은? a. 표준화를가능하게해준다. b. 서로관계없는클래스들에게관계를맺어줄수있다. c. 독립적인프로그래밍이가능하다. d. 다중상속을가능하게해준다. e. 패키지간의연결을도와준다.

61 [7-25] Outer 클래스의내부클래스 Inner 의멤버변수 iv 의값을출력하시오. [ 연습문제 ]/ch7/exercise7_25.java class Outer { class Inner { int iv=100; class Exercise7_25 { public static void main(string[] args) { (1) 알맞은코드를넣어완성하시오. 100 [7-26] Outer 클래스의내부클래스 Inner 의멤버변수 iv 의값을출력하시오. [ 연습문제 ]/ch10/exercise7_26.java class Outer { static class Inner { int iv=200; class Exercise7_26 { public static void main(string[] args) { (1) 알맞은코드를넣어완성하시오. 200

62 [7-27] 다음과같은실행결과를얻도록 (1)~(4) 의코드를완성하시오. [ 연습문제 ]/ch7/exercise7_27.java class Outer { int value=10; inner.method1(); 30 20 10 class Inner { int value=20; void method1() { int value=30; System.out.println( (1) ); System.out.println( (2) ); System.out.println( (3) ); // Inner 클래스의끝 // Outer 클래스의끝 class Exercise7_27 { public static void main(string args[]) { (4) 알맞은코드를넣어완성하시오.

63 [7-28] 아래의 EventHandler 를익명클래스 (anonymous class) 로변경하시오. [ 연습문제 ]/ch7/exercise7_28.java import java.awt.*; import java.awt.event.*; class Exercise7_28 { public static void main(string[] args) { Frame f = new Frame(); f.addwindowlistener(new EventHandler()); class EventHandler extends WindowAdapter { public void windowclosing(windowevent e) { e.getwindow().setvisible(false); e.getwindow().dispose(); System.exit(0); [7-29] 지역클래스에서외부클래스의인스턴스멤버와 static 멤버에모두접근할수 있지만, 지역변수는 final 이붙은상수만접근할수있는이유무엇인가?

64