接口与继承

class TestExtend  {
    public static void main(String[] args) {
        Circle c = new Circle(3.4);
        c.setDigit(8);
        System.out.println(c + "面积:" +c.getArea() + ", 周长:" + c.getGirth());
        Sphere s = new Sphere(3.4);
        s.setDigit(8);
        System.out.println(s + "面积:" +s.getArea() + ", 体积:" + s.getVolume());
        Rectangle r = new Rectangle(34.1234, 65.12345);
        r.setDigit(8);
        System.out.println(r + "面积:" + r.getArea() + ",周长:" + r.getGirth());
        Cube cube = new Cube(12.323,678,123);
        cube.setDigit(8);
        System.out.println(cube + "面积:" +cube.getArea() + ", 体积:" + cube.getVolume());
    }
}
interface Graphy {
    double PI = 3.1415926;
    abstract public double getArea();
    abstract public double getGirth();
    // 格式化double类型,保留位数digit
    default public double formatDouble(double d, int digit) {
        if (digit < 0) {
            throw new IllegalArgumentException();
        }
        if (digit == 0) {
            return Math.round(d);
        }
        double multiple = Math.pow(10, digit);
        d = Math.round(d * multiple);
        d = d / multiple;
        return d;
    }
}
interface Body extends Graphy {
    abstract public double getVolume();
    // 实体没有周长,默认重写父类接口周长方法
    default public double getGirth() {
        return -1;
    }
}
class Circle implements Graphy {
    private double radius;// 半径
    private int digit;// 保留小数位
    // 构造方法,初始化半径
    public Circle(double radius) {
        this.radius = radius;
    }
    // 设置保留小数位
    public void setDigit(int digit) {
        this.digit = digit;
    }
    // 获取保留小数位
    public int getDigit() {
        return digit;
    }
    // 获取半径
    public double getRadius() {
        return radius;
    }
    // 获取面积
    public double getArea() {
        if (radius >= 0) {
            return formatDouble(2 * Graphy.PI * radius, digit);
        } else
            return -1;
    }
    // 获取周长
    public double getGirth() {
        if (radius >= 0) {
            return formatDouble(radius * Math.pow(Graphy.PI, digit) / 2, 2);
        } else
            return -1;
    }
    // 自我描述
    public String toString() {
        return this.getClass().getName() + ":radius:" + radius;
    }
}
/**
 * 球体是从圆继承半径和面积(面积要重写),
 */
class Sphere extends Circle implements Body{
    // 带参构造
    public Sphere(double radius) {
        super(radius);
    }
    // 获得体积
    public double getVolume() {
        return formatDouble(4 * PI * Math.pow(super.getRadius(), 3) / 3, super.getDigit());
    }
    // 获得面积
    public double getArea() {
        return formatDouble(4 * PI * Math.pow(super.getRadius(), 2), super.getDigit());
    }
}
class Rectangle implements Graphy{
    private double length;
    private double width;
    private int digit;
    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }
    // 设置保留小数位
    public void setDigit(int digit) {
        this.digit = digit;
    }
    // 获取保留小数位
    public int getDigit() {
        return digit;
    }
    public double getLength() {
        return length;
    }
    public double getWidth() {
        return width;
    }
    public double getArea() {
        return formatDouble(length * width, digit);
    }
    public double getGirth() {
        return formatDouble(2 * (length + width), digit);
    }
    public String toString() {
        return this.getClass().getName() + ":length:" + length + ",width:" + width;
    }
}
class Cube extends Rectangle implements Body{
    double height;
    public Cube(double length, double width, double height) {
        super(length, width);
        this.height = height;
    }
    public double getArea() {
        return formatDouble(super.getArea() *2  + 2 * (super.getLength() + super.getWidth()) * height, super.getDigit());
    }
    public double getVolume() {
        return formatDouble(super.getArea() * height, super.getDigit());
    }
    public String toString() {
        return super.toString() + ",height:" + height;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aachen0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值