1. 추상 클래스는 그 자체로 객체를 생성할 수 없다.
반드시 상속 받아서 그 클래스를 생성
2. Exam01 : 지난주 클래스를 조금 더 세련되게 바꿈
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/***********************************************************************************/
//추상 클래스 : 도형의 공통적인 속성을 가짐
more..
abstract class Figure {
public static final double PI = 3.14; // PI값
protected int fX, fY; // 도형의 x, y좌표
protected String fColor; // 도형의 색깔
protected double fDimension = 0.0; // 도형의 면적
public Figure() {
fX = 0;
fY = 0;
fColor = "white";
}
public Figure(int x, int y, String color) {
fX = x;
fY = y;
fColor = color;
}
// 추상 메소드 : 도형을 그림
public abstract void drawFigure();
// 추상 메소드 : 도형의 면적을 구함
public abstract double getDimension();
}
/***********************************************************************************/
/***********************************************************************************/
//사각형 관련 클래스
more..
class Rectangle extends Figure {
private int rWidth, rHeight; // 사각형의 가로, 세로
// 생성자 인자 : 가로 너비, 세로 너비, x좌표, y좌표, 색깔
public Rectangle(int width, int height, int x, int y, String color) {
super(x, y, color);
rWidth = width;
rHeight = height;
}
// Override : 도형을 그린다
public void drawFigure() {
System.out.printf("좌표가 (%d,%d)이고 색상이 %s인 %s를 그립니다.\n",
fX, fY, fColor, "사각형");
System.out.printf("면적은 %f입니다.\n\n", getDimension());
}
// Override : 면적을 구한다
public double getDimension() {
fDimension = rWidth * rHeight;
return fDimension;
}
}
/***********************************************************************************/
/***********************************************************************************/
//원 그리기 관련 클래스
more..
class Ellipse extends Figure {
private int eR; // 원의 반지름
// 생성자
// 인자 : 반지름, x좌표, y좌표, 색깔
public Ellipse(int r, int x, int y, String color) {
super(x, y, color);
eR = r;
}
// Override : 도형을 그린다
public void drawFigure() {
System.out.printf("좌표가 (%d,%d)이고 색상이 %s인 %s를 그립니다.\n",
fX, fY, fColor, "원");
System.out.printf("면적은 %f입니다.\n\n", getDimension());
}
// Override : 면적을 구한다
public double getDimension() {
fDimension = eR * eR * Figure.PI;
return fDimension;
}
}
/************************************************************************************/
/************************************ MAIN *****************************************/
more..
public class DrawFigure {
// 입력 클래스
public static InputStreamReader isr = new InputStreamReader(System.in);
public static BufferedReader br = new BufferedReader(isr);
public static void main(String[] args) throws IOException {
System.out.print("그릴 도형의 갯수를 입력->"); // 그릴 도형의 갯수를 입력
int drawNum = Integer.parseInt(br.readLine());
System.out.println();
Figure figure[] = new Figure[drawNum]; // 도형 클래스 폴리모피즘
int kindFigure = 0; // 그릴 도형의 종류
int x, y; // 도형의 좌표
String color; // 도형의 색상
// 그릴 도형의 갯수만큼 도형의 정보를 입력 받는다.
for(int i = 0 ; i < figure.length ; i++) {
System.out.printf("[%d번째]%d개의 도형을 입력하세요(1:원, 2:사각형)-> ", i+1, figure.length);
kindFigure = Integer.parseInt(br.readLine());
System.out.println();
System.out.print("도형의 x좌표를 입력하세요->");
x = Integer.parseInt(br.readLine());
System.out.print("도형의 y좌표를 입력하세요->");
y = Integer.parseInt(br.readLine());
System.out.print("도형형의 색깔을 입력하세요->");
color = br.readLine();
switch(kindFigure) {
case 1:
System.out.print("원의 반지름 입력하세요->");
int r = Integer.parseInt(br.readLine());
System.out.println();
figure[i] = new Ellipse(r, x, y, color);
break;
case 2:
System.out.print("사각형의 가로 길이를 입력하세요->");
int width = Integer.parseInt(br.readLine());
System.out.print("사각형의 세로 길이를 입력하세요->");
int height = Integer.parseInt(br.readLine());
System.out.println();
figure[i] = new Rectangle(width, height, x, y, color);
break;
default:
System.out.println("숫자를 다시 입력하세요");
System.out.println();
i--;
continue;
}
}
for(Figure f : figure)
f.drawFigure(); // 도형 그리기!!
}
}
/***********************************************************************************/
JCreator
2007/05/21 12:18
2007/05/21 12:18
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다