八边形类 Octagon

 编写一个名为Octagon的类,它继承自GeometricObject类并实现Comparable和Cloneable接口。假设八边形八条边的边长相等。它的面积可以使用下面的公式计算:面积 = (2 + 4/√2) * side * side

画出包括Octagon、GeometricObject、Comparable和Cloneable的UML图。编写一个测试程序,创建一个边长值为5的Octagon对象,然后显示它的面积和周长。使用clone方法创建一个新对象,并使用compareTo方法比较这两个对象。
代码如下:

import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Date;

public class Octagon extends GeometricObject implements Cloneable,Comparable<Octagon >{
    private double side;
    Octagon(double side){
        this.side = side;
    }
    Octagon(String color,boolean filled,double side){
        super(color,filled);
        this.side = side;
    }
    public double getSide(){
        return side;
    }
    public void setSide(double side){
        this.side = side;
    }
    public double getArea(){
        return (2 + 4 / Math.sqrt(2)) * side * side;
    }
    public double getPerimeter(){
        return 8 * side;
    }
    public int compareTo(Octagon O){
        if(getArea() > O.getArea())
            return 1;
        else if (getArea() < O.getArea())
            return -1;
        else
            return 0;
    }
    public String toString(){
        return super.toString() + "\nArea is: " + getArea() + " Perimeter is: " + getPerimeter();
    }
    public Object clone() throws CloneNotSupportedException{
        return super.clone();
    }
    public static void main(String[] args) {
     Octagon octagon1 = new Octagon(5.0);
     System.out.println(octagon1.toString());
        try {
            Octagon octagon2 = (Octagon)octagon1.clone();
    System.out.println("(大于返回 1,小于返回 -1,等于返回 0)返回值: " + octagon1.compareTo(octagon2));
        } catch (CloneNotSupportedException ex) {
            Logger.getLogger(Octagon.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
    
}

abstract class GeometricObject{
    private String color = "white";
    private boolean filled;
    private Date dateCreated;
    protected GeometricObject(){
        dateCreated = new Date();
    }
    protected GeometricObject(String color,boolean filled){
        dateCreated = new Date();
        this.color = color;
        this.filled = filled;
    }
    public String getColor(){
        return color;
    }
    public void setColor(String color){
        this.color = color;
    }
    public boolean isFilled(){
        return filled;
    }
    public void setFilled(boolean filled){
        this.filled = filled;
    }
    public Date getDateCreated(){
        return dateCreated;
    }
    @Override
    public String toString(){
        return "created on " + dateCreated + "\ncolor: " + color + " and filled: " + filled;
    }
    public abstract double getArea();
    public abstract double getPerimeter();
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值