Download presentation
Presentation is loading. Please wait.
1
8장 상속 ①
2
목차 상속 연습 다양한 개 만들기 정렬된 정수 리스트 만들기 시험 문제 내기 운동 선수 비교하기
3
다양한 개 만들기 다음의 프로그램을 아래와 같이 수정하시오.
DogTest.java에 Yorkshire와 Labrador를 생성하고 출력하는 코드를 삽입한다. 에러가 발생할 것이다. 이를 수정하라. 힌트 : Labrador의 생성자를 수정한다. DogTest.java에 Yorkshire와 Labrador의 평균무게를 출력하는 코드를 삽입한다. 힌트 : Yorkshire에 필요한 변수와 메소드를 추가한다. Dog.java에 abstract int avgBreedWeight() 를 추가한다. 힌트1 : Dog을 추상 클래스로 만든다. 힌트2 : 추상클래스로부터는 객체를 생성할 수 없다.
4
다양한 개 만들기 – DogTest.java // **************************************************************** // DogTest.java // // 개를 생성하고, 그것이 짖는 것을 간단히 테스트하는 클래스 public class DogTest { public static void main(String[] args) Dog dog = new Dog("Spike"); System.out.println(dog.getName() + " says " + dog.speak()); }
5
다양한 개 만들기 – Dog.java // **************************************************************** // Dog.java // 개의 이름을 유지하고, 그것이 짖을 수 있도록 하는 클래스 public class Dog { protected String name; // // 구성자 - 개의 이름을 저장한다. public Dog(String name) { this.name = name; } // 개의 이름을 반환한다. public String getName() { return name; // 개가 짖는 내용을 문자열로 반환한다. public String speak() { return "Woof";
6
다양한 개 만들기 – Yorkshire.java
// **************************************************************** // Yorkshire.java // // 요크셔테리어에 대한 정보를 정보를 갖는, Dog을 상속한 클래스 // Dog의 speak 메소드를 재정의한다. public class Yorkshire extends Dog { public Yorkshire(String name) super(name); } // // 작게 짖는다. - Dog의 speak 메소드를 재정의한다. public String speak() return "woof";
7
다양한 개 만들기 –Labrador.java
// **************************************************************** // Labrador.java // 래브라도 리트리버에 대한 정보를 갖는, Dog을 상속한 클래스 // Dog의 speak 메소드를 재정의하고, // 이 종의 평균 무게에 대한 정보를 포함시킨다. public class Labrador extends Dog { private String color; // black, yellow, 또는 chocolate private int breedWeight = 75; public Labrador(String name, String color) { this.color = color; } // // 크게 짖는다. - Dog의 speak 메소드를 재정의한다. public String speak() { return "WOOF"; // 무게를 반환한다. public int avgBreedWeight() { return breedWeight;
8
정렬된 정수 리스트 만들기 다음의 프로그램은 IntList라는 정수 리스트를 제공한다.
이 클래스를 확장하여 정렬된 정수 리스트인 SortedIntList를 만드시오. 이 리스트는 항상 작은 것부터 큰 순으로 정렬된 순서의 리스트를 갖는다. 새로운 값을 리스트에 추가할 시에, 정확히 순서에 맞는 위치에 삽입할 수 있도록 add 메소드를 재정의한다. 리스트를 처음부터 쭉 읽어나가면서 추가하려는 값이 들어갈 위치를 찾는다. 찾은 위치 이후에 있는 값들을 모두 한 칸씩 뒤로 민다. 그리고 그 위치에 새로운 값을 저장한다. SortedIntList를 테스트해 볼 수 있도록 ListTest.java를 수정해보자.
9
정렬된 정수 리스트 만들기 – IntList.java
// **************************************************************** // IntList.java // // 목록에 정수를 추가하는 메소드와 목록의 내용을 인덱싱하여 반환하는 // toString 메소드를 가지고 있는 (정렬되지 않는) 정수 목록 클래스 public class IntList { protected int[] list; protected int numElements = 0; // // 구성자 - 주어진 크기의 정수 목록을 생성한다. public IntList(int size) list = new int[size]; }
10
정렬된 정수 리스트 만들기 – IntList.java
// // 목록에 정수를 추가한다. // 만약 목록이 꽉 찼다면, 메세지를 출력하고 아무런 일도 하지 않는다. public void add(int value) { if (numElements == list.length) System.out.println("Can't add, list is full"); else list[numElements] = value; numElements++; } // 목록의 내용을 인덱싱하여 문자열로 반환한다. public String toString() String returnString = ""; for (int i=0; i<numElements; i++) returnString += i + ": " + list[i] + "\n"; return returnString;
11
정렬된 정수 리스트 만들기 – ListTest.java
// **************************************************************** // ListTest.java // // IntList를 생성하고, 그것에 약간의 정수들을 넣어보고, // 그 목록을 출력해보는 간단한 테스트 프로그램 public class ListTest { public static void main(String[] args) IntList myList = new IntList(10); myList.add(100); myList.add(50); myList.add(200); myList.add(25); System.out.println(myList); }
12
시험 문제 내기 다음과 같이 추상클래스 TestQuestion을 만든다.
문제를 저장하기 위한 protected String 변수를 만든다. 문제를 읽기 위한 protected abstract void readQuestion() 메소드를 만든다. 이 추상클래스를 상속하여 다음과 같은 두 가지 클래스를 만든다. Essay 클래스 요구되는 답이 몇 줄인지 저장하기 위한 int형 변수가 필요하다. MultiChoice 클래스 여러 개의 선택 문항을 저장하기 위한 String 배열이 필요하다. 두 클래스에 각각 readQuestion() 메소드와 toString() 메소드를 적절히 정의한다.
13
시험 문제 내기 이를 테스트해 보기 위한 WriteTest 클래스를 만든다.
여러 개의 문제를 저장하기 위한 TestQuestion 배열을 만든다. 다음과 같이 사용자로부터 문제를 읽어 들이고, 그 내용을 출력한다. 문제 개수를 입력 받는다. 문제 개수만큼 아래의 내용을 입력 받는다. 문제의 종류를 입력 받는다. (Essay : e, MutiChoice : m) Essay라면, 요구되는 답의 줄 수와 문제를 입력 받는다. MultiChoice라면, 보기의 개수와 문제를 입력 받는다. 그리고 보기 개수만큼 보기 내용을 입력 받는다.
14
시험 문제 내기 – 입력 예시 3 e 5 Why does the constructor of a derived class have to call the constructor of its parent class? m 4 Which of the following is not a legal identifier in Java? Guess2 2ndGuess _guess2_ Guess What does the “final” modifier do?
15
운동선수 비교하기 다음의 프로그램은 두 명의 운동선수 정보를 입력 받아, 그들이 같은 선수인지 비교한다.
주석으로 처리된 부분을 완성해 보자. 두 명의 운동선수 정보를 입력 받는다. equal() 메소드를 이용하여 두 선수가 같은 선수인지 비교하고 그 결과를 출력한다. 팀과 유니폼번호가 같다면 같은 선수라고 판단하도록 equal() 메소드를 재정의해 보자. 재정의하는 equal() 메소드는 Player 클래스를 매개변수로 받아들여야 할 것이다. 자신과 매개변수로 받아들인 선수가 같은지 비교한다.
16
운동선수 비교하기 – Player.java // ********************************************************** // Player.java // // 운동선수에 대한 정보를 저장하는 Player 클래스를 정의한다. import java.util.Scanner; public class Player { private String name; private String team; private int jerseyNumber; // // 운동선수의 이름, 팀, 저지 넘버를 읽어들인다. public void readPlayer() Scanner scan = new Scanner(System.in); System.out.print("Name: "); name = scan.nextLine(); System.out.print("Team: "); team = scan.nextLine(); System.out.print("Jersey number: "); jerseyNumber = Scan.nextInt(); }
17
운동선수 비교하기 – ComparePlayers.java
// ************************************************************** // ComparePlayers // // 두명의 운동선수에 대한 정보를 읽어들이고, 그들이 같은 선수를 // 표현하고 있는 것인지 아닌지 말해준다. import java.util.Scanner; public class ComparePlayers { public static void main(String[] args) Player player1 = new Player(); Player player2 = new Player(); Scanner scan = new Scanner(); // 첫번째 선수의 정보를 읽어들인다. // 두번째 선수의 정보를 읽어들인다. // 두명의 선수를 비교하고, 그것들이 같은 선수를 표현한 것인지 아닌지 // 말해주는 메세지를 출력한다. }
Similar presentations