본문 바로가기

Java/과제

chapter 08) 인터페이스example - Shape 클래스 변경하기

7장 상속 과제 섹션 3에서 만들었던 도형 관련 클래스인 Shape 클래스를 추상클래스로 만들어 보자.

 

package practice3;

public abstract class Shape implements Comparable<Shape> {
	String name;

	public abstract double area();

	public abstract double perimeter();

	@Override
	public int compareTo(Shape o) {
		if (area() > o.area()) {
			return 1;
		} else if (area() < o.area()) {
			return -1;
		} else {
			return 0;
		}
	}

	@Override 
	
	public String toString() {
		return String.format("도형의 종류: %s, 둘레: %f, 넓이: %f", name, perimeter(), area());
	}
}
package practice3;

public class Circle extends Shape {
	private double radius;

	public Circle(double radius) {
		this.radius = radius;
	}

	@Override
	public double area() {
		return radius * radius * Math.PI;
	}

	@Override
	public double perimeter() {
		return radius * 2.0 * Math.PI;
	}

	public String toString() {
		return String.format("도형의 종류: 원, 둘레: %.2f㎝, 넓이: %.2f㎠", perimeter(), area());
	}
}
package practice3;

public class Rectangle extends Shape {
	private double width;
	private double height;

	public Rectangle(double width, double height) {
		this.width = width;
		this.height = height;
	}

	@Override
	public double area() {
		return width * height;
	}
	@Override
	public double perimeter() {
		return (width + height) * 2.0;
	}

	public String toString() {
		return String.format("도형의 종류: 사각형, 둘레: %.2f㎝, 넓이: %.2f㎠", perimeter(), area());
	}
}
package practice3;

public class Triangle extends Shape {
	private double side;

	public Triangle(double side) {
		this.side = side;
	}

	@Override
	public double area() {
		return Math.sqrt(3) * side * side / 4.0;
	}

	@Override
	public double perimeter() {
		return side * 3.0;
	}

	public String toString() {
		return String.format("도형의 종류: 삼각형, 둘레: %.2f㎝, 넓이: %.2f㎠", perimeter(), area());
	}
}
package practice3;

import java.util.Arrays;

public class ShapeTest {
	public static void main(String[] args) {
		Shape[] shapes = new Shape[7];
		shapes[0] = new Circle(1.0);
		shapes[1] = new Triangle(2.0);
		shapes[2] = new Rectangle(2.0,3.0);
		shapes[3] = new Triangle(3.0);
		shapes[4] = new Rectangle(5.0,2.3);
		shapes[5] = new Circle(2.5);
		shapes[6] = new Circle(1.3);
		
		System.out.println("<도형들을 넓이 기준으로 정렬 하기 전>");
		for (Shape s : shapes) {
			System.out.println(s);
		}
		Arrays.sort(shapes);
		System.out.println();
		System.out.println("<도형들을 넓이 기준으로 정렬 한 후>");
		for (Shape s : shapes) {
			System.out.println(s);
		}
	}
}

Recent Posts
Popular Posts
Tags
더보기
Recent Comments