[Java实验 4] 接口

一、实验题目

1、实验目的

  1. 掌握类的继承关系和派生方法。
  2. 掌握多态的概念与使用。
  3. 掌握面向对象程序设计的特性,包括类的继承、方法的重载和覆盖,抽象类和方法、接口等。

2、实验环境

  1. 硬件环境:个人 PC 机
  2. 软件环境:windows 操作系统+JDK1.8 或以上+Eclipse 或 Idea

3、实验内容

题目 1.

  1. 定义接口 AreaInterface,该接口有一个双精度浮点型的常量 PI,它的值等于 Math.PI;含 有一个求面积的方法 double area()。
  2. 定义一个 Rectangle(长方形)实现 AreaInterface 接口,该类有两个 private 访问权限的双 精度浮点型变量 x(长)和 y(宽);定义一个 public 访问权限的构造方法,用来给类变量赋 值;实现 area()方法得到长方形的面积;定义 toString()方法,返回一段字符串信息,内容如 下格式:“该长方形面积为:”+面积。
  3. 定义一个 TestArea 类,在它的 main()方法中;创建一个 Rectangle 的实例,长为 10.0,宽 为 20.0,输出它的面积。

题目 2.

  1. 定义接口 Shape,其中包括 area 方法。类 Circle、Square 和 Triangle 均实现了接口 Shape。 定义主函数,创建元素个数为 3 的 Shape 类型的一维数组,分别为数组元素创建 Circle、Square 和 Triangle 类型的对象,最后分别调用各数组元素的 area 方法,输出相关信息。

二、实验操作

前言

  1. 为了克服Java单继承的缺点,Java使用了接口
  2. 接口可以用来描述一种抽象。
  3. 接口可以用来实现解耦。

1.接口的概念

接口在java中是一种类似于抽象方法的集合

2.接口的特点

  • 它的形式和类很像,但是类主要是去描述对象的属性和方法,而接口则包含类要实现的方法
  • 实现接口的类必须要定义接口里的所有方法,除非它是抽象类
  • 接口是无法被实例化的,但是一个类实现了某一个接口,就可以调用接口里的方法。
  • 接口可以继承多个接口。
  • 接口中的方法都是共有的。
  • 接口和接口中的方法都是隐式抽象的,声明时不必使用abstract关键字。
  • 举个例子,比如求面积的这个能力就可以被定义成一个接口,因为每个图形的面积不一样,求法也不一样,可以通过各种图形类来实现求面积这个能力。

3.实验代码一

建立一个AreaInterface接口,定义功能为求图形面积

3.1、定义AreaInterface接口

public interface AreaInterface {
    double PI = Math.PI;
    double area();
}

建立长方形类,定义他的长和宽,并求出面积

3.2、定义Recangle类实现接口

public class Rectangle implements AreaInterface{
//    长方形的长x
    private double x;
//    长方形的宽y
    private double y;

    public Rectangle(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public Rectangle() {
    }

    @Override
    public String toString() {
        return "该长方形面积为:" + area();
    }

    @Override
    public double area() {
        return x*y;
    }
}

这里要注意,重写接口声明的方法时:

  • 不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
  • 要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。

实现接口时,也要注意:

  • 一个类只能继承一个类,但是能实现多个接口
  • 接口能继承另一个接口。并且能多继承。

再运用主类测试,看看接口方法是否被调用

3.3、定义TestArea类

public class TestArea {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle(10.0,20.0);
        System.out.println(rectangle.toString());
    }
}

结果如下:

4.实验代码二

根据题目要求,建立了Shape接口

public interface Shape {
    public double area();

}

同样,分别建立Circle,Square,Traingle类

4.1、Circle类

public class Circle implements Shape{
    private double r;

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

    public Circle() {
    }

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

    @Override
    public String toString() {
        return "圆的面积为" + area();
    }
}

 4.2、Square类

public class Square implements Shape{
//    定义正方形的边长x
    double x;

    public Square(double x) {
        this.x = x;
    }

    @Override
    public double area() {
        return x * x;
    }

    public Square() {
    }

    @Override
    public String toString() {
        return "正方形的面积为" + area();
    }
}

 4.3、Triangle类

public class Triangle implements Shape{
    private double a ,b ,c;
    private double p;
    @Override
    public double area() {
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
//        海伦公式求三角形面积
    }

    public Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
        p = (a+b+c)/2;
    }

    public Triangle() {
    }

    @Override
    public String toString() {
        return "三角形的面积为" + area();
    }
}

4.4、TestArea类(修改)

import java.util.concurrent.TransferQueue;

public class TestArea {
    public static void main(String[] args) {
        System.out.println("------[题目1]------");
        Rectangle rectangle = new Rectangle(10.0,20.0);
        System.out.println(rectangle.toString());
        System.out.println("------[题目2]------");
        Circle circle = new Circle(4.0);
        System.out.println(circle.toString());
        Square square = new Square(3.0);
        System.out.println(square.toString());
        Triangle triangle = new Triangle(3,4,5);
        System.out.println(triangle.toString());
    }
}

结果如下

 


 

三、实验总结 

  • 理解抽象类和接口的联系和区别
  • 掌握接口的继承与实现
  • 进一步体会复杂系统中如何设计和使用抽象类和接口。

 完成了以上三点,并且多注意在实现接口时的一些事项。

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值