题目:
(Octagon类)编写一个名为Octagon的类,它继承自Geometricobject的类并实现Comparable和Cloneable接口。假设八边形八条边的边长都相等。
Octagon类县有个私有的命名为side的double 数据域及其设置方法和获取方法。它还具有一个无参的构造方法来构建一个边为0的Octagon,以及另外一个使用指定边来构建Octagon的构造方法。
编写一个测试程序,创建个边 长值为5的Octagon 对象,然后显示它的面积和周长。 使用clone方法创建一个新对象,并使用compareTo方法比较这两个对象。
GeometricObject类:
package problem;
import java.util.Date;
public abstract class GeometricObject {
private String color = "white"; //对象的颜色
private boolean filled;//对象是否填充颜色
private Date dateCreated;//对象创建的日期
//无参构造
public GeometricObject() {
this("white", false);
this.dateCreated = new Date();
}
//创建一个带特定颜色和填充值的有参构造
public GeometricObject(String color, boolean filled) {
super();
this.color = color;
this.filled = filled;
this.dateCreated = new Date();
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
//返回filled的属性
public boolean isFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled = filled;
}
public Date getDateCreated() {
return dateCreated;
}
public String toString() {
return "created on"+dateCreated+" color: "+color+" filled: "+filled;
}
public abstract double getArea();
public abstract double getPerimeter();
}
Octagon类:
package problem;
public class Octagon extends GeometricObject implements Comparable<Octagon>,Cloneable {
private double side;
//构造方法
public Octagon() {
this(0,"white",false);
}
public Octagon(double side) {
this(side,"white",false);
}
public Octagon(double side,String color, boolean filled) {
super(color, filled);
this.side = side;
}
//设置方法和获取方法
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
}
@Override
public int compareTo(Octagon o) {
if (getArea() > o.getArea()) {
return 1;
}
else if(getArea() < o.getArea()) {
return -1;
}
else {
return 0;
}
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return (2 + 4 /Math.sqrt(2)) * Math.pow(side, 2);
}
@Override
public double getPerimeter() {
// TODO Auto-generated method stub
return 8 * side;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString() + " side: " + side +" Perimeter: "+ getPerimeter() + " Area: "+ getArea();
}
}
OctagonTest类:
package problem;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class OctagonTest {
@Test
void test() throws CloneNotSupportedException {
Octagon octagon1 = new Octagon(5);
System.out.println(octagon1.toString());
Octagon octagon2 = (Octagon) octagon1.clone();
System.out.println(octagon2.toString());
if (octagon1.compareTo(octagon2) == 0) {
System.out.println("True! They are equal!");
} else {
System.out.println("Flase! They are not equal!");
}
}
}