八边形Octagan类(接口)

目录

题目需求        

方法接口定义:

裁判测试程序样例:

输入样例:

输出样例:

 接口(interface)

什么是接口

接口的特点

接口的实现

完整代码 

后言

题目需求        

编写一个名为Octagon的类,表示八边形。假设八边形八条边的边长都相等。它的面积可以使用下面的公式计算:

     面积 = (2 + 4 / sqrt(2)) * 边长 * 边长

请实现Octagon类,其实现了Comparable和Cloneable接口。

1 有一个私有变量double side ,表示八边形的边长。

2 构造函数Octagon(double side),初始化side。

3 为side添加getter和setter方法。

4 double getPerimeter()方法,计算周长。

5 double getArea()方法,计算面积。

6 实现Comparable接口的方法 public int compareTo(Octagon o);

如果当前对象的边长比参数o的边长大,返回1,小则返回-1,相等返回0。

7 实现Cloneable接口的方法 protected Object clone()

编写一个测试程序,根据用户输入的浮点数作为边长,创建一个Octagon对象,然后显示它的面积和周长。使用clone方法创建一个新对象,并使用CompareTo方法比较这两个对象。

此题提交时将会附加裁判测试程序到被提交的Java程序末尾。

方法接口定义:

double getPerimeter();
double getArea();
实现Comparable接口的方法 public int compareTo(Octagon o);
实现Cloneable接口的方法 protected Object clone();

###程序框架:

程序按以下框架进行设计后提交:

class Octagon implements Comparable<Octagon>,Cloneable{

    ……

    @Override
    public int compareTo(Octagon o){
           ……
    }
    @Override
    protected Object clone() {
        return this;
    }
}

裁判测试程序样例:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Octagon a1 = new Octagon(input.nextDouble());
        System.out.printf("Area is %.2f\n", a1.getArea());
        System.out.println("Perimeter is " + a1.getPerimeter());
        Octagon a2 = (Octagon) a1.clone();
        System.out.println("Compare the methods " + a1.compareTo(a2));
    }
}

/* 请在这里填写答案 */

输入样例:

5

输出样例:

Area is 120.71
Perimeter is 40.0
Compare the methods 0

 接口(interface)

在Java中,我们用interface关键字来声明接口

什么是接口

  • 在面向对象编程(OOP)中,接口是一种抽象类型,它定义了类或对象应该具有的方法和属性,但不包含具体的实现。类或对象可以实现(implement)接口,从而保证它们具有接口定义的行为,但实现细节可以各不相同。
  • 接口的使用有助于提高代码的可维护性和可扩展性,因为它们定义了组件之间的清晰界限,并且降低了代码耦合度,使得各个组件可以独立开发、测试和修改。

接口的特点

接口是绝对抽象的类,这意味着:

  1. 接口不能被实例化
  2. 其中的方法必须全为抽象方法(这意味着其中的每个方法都必须被实现)
  3. 接口中没有构造方法
  4. 接口没有成员变量,其必须为final和static修饰的变量

接口的实现

  • 类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
  • 类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

完整代码 

import java.util.Scanner;


class Octagon implements Comparable<Octagon>, Cloneable {
    private double side; // 八边形的边长

    // 构造函数,初始化边长
    public Octagon(double side) {
        this.side = side;
    }

    // 获取边长
    public double getSide() {
        return side;
    }

    // 设置边长
    public void setSide(double side) {
        this.side = side;
    }

    // 计算周长
    public double getPerimeter() {
        return 8 * side;
    }

    // 计算面积
    public double getArea() {
        return (2 + 4 / Math.sqrt(2)) * side * side;
    }

    // 实现Comparable接口的方法,比较边长大小
    @Override
    public int compareTo(Octagon o) {
        if (this.side > o.getSide()) {
            return 1; // 当前对象边长大于参数对象边长,返回1
        } else if (this.side < o.getSide()) {
            return -1; // 当前对象边长小于参数对象边长,返回-1
        } else {
            return 0; // 边长相等,返回0
        }
    }

    // 实现Cloneable接口的方法,克隆对象
    @Override
    protected Object clone() {
        try {
            return super.clone(); // 调用父类的clone方法进行克隆
        } catch (CloneNotSupportedException e) {
            return null; // 处理克隆异常
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Octagon a1 = new Octagon(input.nextDouble()); // 创建Octagon对象,接收用户输入的边长
        System.out.printf("Area is %.2f\n", a1.getArea()); // 输出面积
        System.out.println("Perimeter is " + a1.getPerimeter()); // 输出周长
        Octagon a2 = (Octagon) a1.clone(); // 克隆一个Octagon对象
        System.out.println("Compare the methods " + a1.compareTo(a2)); // 比较两个对象的边长大小
    }
}

后言

接口让程序的构建方便了许多,我们可以利用接口,事先架构好需要实现的方法,由于接口中每个方法都必须被实现的特性,当进行项目的具体实现时就不会丢三落四。同样的,接口也是实现多继承的方式,是实现多态的重要手段之一。

本篇博文就到这里了,博主也是初次接触接口,是个刚上路的小白,如有错误,还请海涵

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

eternal*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值