평소에는 소스 보고 코딩만 했는데, 차라리 오늘같이 자유로 소스를 구현하는 시간이 더 유익한것 같습니다.
다음은 수업시간에 작성한 폴리모피즘을 구현한 소스입니다.
허접하지만 폴리모피즘이 무엇인가 알 수 있는 간단한 소스이니 참고 하세요 ^^
도형 공통 속성 클래스 열기
// 도형의 공통 속성을 가진 클래스
public abstract class Figure {
public static final double PI = 3.14; // PI값
private int fX, fY; // 도형의 x, y좌표
private String fColor; // 도형의 색깔
private String fName; // 도형의 이름
protected double fDimension; // 도형의 면적
public Figure() {
fX = 0;
fY = 0;
fColor = "white";
fName = "기본도형";
}
public Figure(int x, int y, String color, String name) {
fX = x;
fY = y;
fColor = color;
fName = name;
}
// 도형의 좌표를 구한다
public void getXY() {
System.out.printf("이 도형의 현재 좌표는 %d, %d입니다.", fX, fY);
}
// 도형의 색깔을 구한다
public void getColor() {
System.out.printf("이 도형의 색깔은 %s입니다.", fColor);
}
// 도형의 그린다
public void drawFigure() {
System.out.printf("좌표가 (%d,%d)이고 색상이 %s인 %s를 그립니다.\n",
fX, fY, fColor, fName);
System.out.printf("면적은 %f입니다.\n\n", getDimension());
}
// 도형의 면적을 구한다
public abstract double getDimension();
}
사각형 클래스 열기
// 사각형 관련 클래스
public 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 double getDimension() {
fDimension = rWidth * rHeight;
return fDimension;
}
}
원 클래스 열기
// 원 관련 클래스
public 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 double getDimension() {
fDimension = eR * eR * Figure.PI;
return fDimension;
}
}
메인 클래스 열기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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();
if(kindFigure == 1) {
System.out.print("원의 반지름 입력하세요->");
int r = Integer.parseInt(br.readLine());
System.out.println();
figure[i] = new Ellipse(r, x, y, color);
} else if(kindFigure == 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);
} else {
System.out.println("숫자를 다시 입력하세요");
System.out.println();
i--;
continue;
}
}
for(Figure f : figure)
f.drawFigure(); // 도형 그리기!!
}
}
JCreator
2007/05/18 10:28
2007/05/18 10:28
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다