반응형
클래스가 나눠져있으니 알맞게 나눠서 작성해보시면 좋을듯 합니다.
또한 제가 공부하면서 코드리뷰도 달았으니, 참고 하실 분들은 참고하시면 됩니다.
좌표 클래스
package package2;
//포인트 객체를 만들고 이를 좌표값을 활용하려는 것이다.
public class Point {
public int x;
public int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
도형 클래스
package package2;
//도형의 형질을 물려줄 클래스이다.
public abstract class Shape {
//외부에서 접근 못하게 막아둔 객체이기에 get set이 필요하다.
private String brushColor;
private String penColor;
//생성자를 통해서 필드 값을 한번 초기화 해줄 수 있다.
Shape(String brushColor, String penColor) {
this.brushColor = brushColor;
this.penColor = penColor;
}
//이거는 자식 객체에서 재정의 해서 쓸 메소드이다.
abstract void drawing();
//도형 형질에 저장되는 외부객체를 차단한 컬러 속성을 가져오는 것이다.
public String getBrushColor() {
return brushColor;
}
public String getPenColor() {
return penColor;
}
}
사각형 클래스
package package2;
public class Square extends Shape {
//좌표 값을 의미하는 포인트 객체를 가져올 변수이다.
private Point leftTop;
private Point rightBottom;
//생성자를 통해서 부모 클래스의 형질과 이 클래스의 좌표 객체 변수와 좌표 객체를 이어준다.
public Square(String brushColor, String penColor, Point leftTop, Point rightBottom) {
super(brushColor, penColor);
this.leftTop = leftTop;
this.rightBottom = rightBottom;
}
Point getLeftTop() {
return leftTop;
}
Point getRightBottom() {
return rightBottom;
}
//부모클래스의 드로잉 메소드를 오버라이드 하는 것인데, super 키워드를 통해서 부모클래스에 존재하는 get 메소드 다시 말해 객체 생성 시점에서는 부모클래스 로부터
//상속받은 메소드로 색상을 정하고, 생성자를 통해 받아온 좌표 객체의 값을 가져와 좌표를 찍어준다.
@Override
void drawing() {
System.out.println("면색: " + super.getBrushColor() + "선 색: " + super.getPenColor() + "의 도형이 그려집니다.");
System.out.println("(왼쪽 위 좌표: " + this.leftTop.x + ", " + this.leftTop.y + " 오른쪽 아래 좌표: "
+ this.rightBottom.x+ ", " + this.rightBottom.y + ")의 사각형을 그립니다.");
}
}
삼각형 클래스
package package2;
public class Triangle extends Shape {
//포인트 객체와 이어줄 변수이다.
private Point top;
private Point left;
private Point right;
//사각형 객체저럼 생성자를 통해서 이 클래스의 좌표 변수와 매개변수로 받은 좌표객체를 이어주고, 덩달아 부모 클래스의 색상 값을 변경시켜준다.
public Triangle(String brushColor, String penColor, Point top, Point left, Point right) {
super(brushColor, penColor);
this.top = top;
this.left = left;
this.right = right;
}
//사각형 객체와 동일하다.
@Override
void drawing() {
System.out.println("면색: " + super.getBrushColor() + "선 색: " + super.getPenColor() + "의 도형이 그려집니다.");
System.out.println(
"(위 좌표: " + this.top.x + ", " + "왼쪽 좌표" + this.left.x + ", " + " 오른쪽 좌표: " + this.right.x + ")의 삼각형을 그립니다.");
}
public Point getTop() {
return top;
}
public Point getLeft() {
return left;
}
public Point getRight() {
return right;
}
}
원 클래스
package package2;
public class Circle extends Shape {
private Point centerPoint;
public Point getCenterPoint() {
return centerPoint;
}
public Circle(String brushColor, String penColor, Point centerPoint) {
super(brushColor, penColor);
this.centerPoint = centerPoint;
}
@Override
void drawing() {
System.out.println("면색: " + super.getBrushColor() + "선 색: " + super.getPenColor() + "의 도형이 그려집니다.");
System.out.println("(가운데 좌표는: "+ this.centerPoint.x+", "+ this.centerPoint.y+") 입니다.");
}
}
실행
package package2;
import java.util.Scanner;
public class ShpapeExample {
public static void main(String[] args) {
//도형을 선택할 번호를 입력할 스캐너 객체와 문구 그리고 변수이다.
Scanner sc = new Scanner(System.in);
System.out.println("그릴 도형을 선택하세요 (삼각형: 1, 사각형: 2, 원: 3)");
int select = sc.nextInt();
//if 문으로 분기를 정해줬다.
if (select == 1) {
//아래와 동일하게 도형객체를 생성하는 데 이때 생성자의 매개변수에 알맞은 값을 넣어준다.
//여기서는 색상값, 좌표객체이다.
//그리고 static 변수인 ShpapeExample.shapeDrawing()를 불러오고 매개 변수에 도형 객체의 변수를 지정해준다.;
Triangle tri = new Triangle("노란색", "파란색", new Point(50, 10), new Point(10, 50), new Point(50, 50));
ShpapeExample.shapeDrawing(tri);
} else if (select == 2) {
Square rect = new Square("빨강색", "보라색", new Point(10, 10), new Point(50, 50));
ShpapeExample.shapeDrawing(rect);
} else if (select == 3) {
Circle circle = new Circle("초록색","베이지색",new Point(30,20));
ShpapeExample.shapeDrawing(circle);
}
}
//부모타입의 변수를 통해서 자식객체를 여러가지 받아올 수 있는 메소드이다.
//부모클래스의 메소드, 다시 말해 부모클래스로부터 상속받는 메소드를 불러오고 따라서 자식 객체의 메소드가 호출되는 구조이다.
public static void shapeDrawing(Shape shape) {
shape.drawing();
}
}
반응형
'It Study > 프로그래밍 공부' 카테고리의 다른 글
프로그래머스 lv0 - 두 수의 곱 (0) | 2024.09.16 |
---|---|
상속과 다형성을 활용한 java 예제 - 추상클래스 활용 (1) | 2024.09.13 |
java 기본 문법 - 제네릭 메소드. (2) | 2023.10.07 |
java 기본 문법 - 제네릭의 정의 및 제네릭 타입. (0) | 2023.10.04 |
프로세스와 스레드의 간단 개념 (0) | 2023.03.25 |