본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 5장 실습문제(2)

by 푸고배 2018. 9. 19.

4. main() 함수를 다음과 같이 수행할 수 있도록 하기 위한 CPoint 클래스와 CColorPoint 클래스를 작성하고 전체 프로그램을 완성하라. CColorPoint 클래스와 어떤 메소드에서도 System.out.println()을 호출해서는 안 된다. Cpoint 클래스는 생성자가 오직 하나뿐이다. 

public void main(String []arg){

CPoint a,b ;

 

a = new CPoint(2,3);

b = new CColorPoint(3,4,"red");

a.show();

b.show();

System.out.println(a);

System.out.println(b);

 

 

<소스코드> Chapter5_4.java

class CPoint{
	int a;
	int b;
	String color;
	CPoint(int x, int y){
		a=x;
		b=y;
		color="";
	}
	public String toString(){
		return "("+a+","+b+") 입니다";
	}
	public void show(){
		System.out.println("("+a+","+b+")"+color);
	}
}
class CColorPoint extends CPoint{
	CColorPoint(int x, int y, String color) {
		super(x, y);
		this.color = color;
	}
}
public class Chapter5_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CPoint a,b;
		
		a = new CPoint(2,3);
		b = new CColorPoint(3,4,"red");
		a.show();
		b.show();
		System.out.println(a);
		System.out.println(b);
	}

}

 

5. 추상 클래스의 서브 클래스 만들기에 필요한 추상 메소드 오버라이딩과 super()의 사용에 관한 문제이다. 다음과 같은 MyPoint 추상 클래스가 있다.

abstract class MyPoint {

int x;

int y;

public MyPoint(int x, int y) {

this.x = x; this.y = y; 

}

protected abstract void move(int x, int y); // 새로운 x, y 위치로 이동

protected abstract void reverse(); // (x, y)에서 (y, x)로 위치 변경

protected void show() {

System.out.println(x+","+y);

}

}

 

MyPoint를 상속받는 MyColorPoint 클래스를 작성하라. MyColorPoint의 생성자는 MyColorPoint(int x, int y, String color)로 하라. 그리고 다음과 같은 main() 메소드를 삽입하여 실행되도록 하라.

public static void main(String[] args) {

MyPoint p = new MyColorPoint(2, 3, "blue");

p.move(3,4);

p.reverse();

p.show();

}

 

<소스코드> Chapter5_5.java

abstract class MyPoint{
	int x;
	int y;
	public MyPoint(int x, int y){
		this.x = x;
		this.y = y;
	}
	protected abstract void move(int x, int y);
	protected abstract void reverse();
	protected void show(){
		System.out.println(x+","+y);
	}
}
class MyColorPoint extends MyPoint{
	String color;
	MyColorPoint(int x, int y, String color){
		super(x,y);
		this.color = color;
	}

	@Override
	protected void move(int x, int y) {
		// TODO Auto-generated method stub
		this.x = x;
		this.y = y;
	}

	@Override
	protected void reverse() {
		// TODO Auto-generated method stub
		int temp;
		temp=x;
		x=y;
		y=temp;
	}
	protected void show(){
		System.out.println(x+","+y+","+color);
	}
}
public class Chapter5_5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyPoint p =new MyColorPoint(2,3,"Blue");
		p.move(3, 4);
		p.reverse();
		p.show();
	}

}

 

6. 간다난 그래픽 편집기를 콘솔 바탕으로 만들어보자. 본문의 5.6절의 메소드 오버라이딩과 5.7절은 추상 클래스의 설명 중에 Line, Rect, Circle의 도형 객체를 DObject클래스를 상속받아 draw() 메소드를 오버라이딩하도록 구성하였다. 이 예제를 완성해보자. DObject를 추상 메소드 draw()를 가진 추상 클래스로 만들어라. 그래픽 편집기의 기능은 "삽입", "삭제", "모두보기", "종료"의 4가지 이다.

 

<소스코드> Chapter5_6.java

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;

abstract class DObject{
	abstract void draw();
}
class Line extends DObject{

	@Override
	void draw() { // static, private, final로 선언된 메소드는 오버라이딩될 수 없다.
		// TODO Auto-generated method stub
		System.out.println("Line");
	}
	
}
class Rect extends DObject{

	@Override
	void draw() {
		// TODO Auto-generated method stub
		System.out.println("Rect");
	}
	
}
class Circle extends DObject{

	@Override
	void draw() {
		// TODO Auto-generated method stub
		System.out.println("Circle");
	}
	
}
public class Chapter5_6 {
	
	public static void insert(ArrayList<DObject> d){
		System.out.print("도형 종류 Line(1), Rect(2), Circle(3)>>");
		Scanner sd = new Scanner(System.in);
		int ch = sd.nextInt();
		switch(ch){
			case 1:
				d.add(new Line());
				break;
			case 2:
				d.add(new Rect());
				break;
			case 3:
				d.add(new Circle());
				break;
		}
	}
	
	public static void delete(ArrayList<DObject> d){
		System.out.print("삭제할 도형의 위치>>");
		Scanner sd = new Scanner(System.in);
		int ch = sd.nextInt();
		if(ch>=0&&ch<d.size()){
			d.remove(ch);
		} else {
			System.out.println("삭제할 수 없습니다.");
		}
	}
	public static void print(ArrayList<DObject> d){
		for(int i=0;i<d.size();i++){
			d.get(i).draw();
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<DObject> list= new ArrayList<DObject>();
		while(true){
			System.out.print("삽입(1), 삭제(2), 모두 보기(3), 종료(4)>>");
			Scanner sd = new Scanner(System.in);
			int ch = sd.nextInt();
			switch(ch){
				case 1: // 링크드 리스트로 도형 생성하여 연결하기
					insert(list);
					break;
				case 2:
					delete(list);
					break;
				case 3:
					print(list);
					break;
			}
			if(ch==4){
				break;
			}
		}
		
	
	}
	

}

 

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : 

https://github.com/ch1517/First_Step/tree/master/Chapter5/Chapter5

반응형

댓글