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
'Programming Study > 명품자바프로그래밍' 카테고리의 다른 글
[명품자바프로그래밍] 6장 실습문제(2) (0) | 2018.09.20 |
---|---|
[명품자바프로그래밍] 6장 실습문제(1) (0) | 2018.09.20 |
[명품자바프로그래밍] 5장 Open Challenge (0) | 2018.09.19 |
[명품자바프로그래밍] 5장 실습문제(1) (0) | 2017.08.11 |
[명품자바프로그래밍] 4장 Open Challenge (0) | 2017.08.10 |
댓글