一、实验题目
1、实验目的
- 掌握类的继承关系和派生方法。
- 掌握多态的概念与使用。
- 掌握面向对象程序设计的特性,包括类的继承、方法的重载和覆盖,抽象类和方法、接口等。
2、实验环境
- 硬件环境:个人 PC 机
- 软件环境:windows 操作系统+JDK1.8 或以上+Eclipse 或 Idea
3、实验内容
题目 1.
- 定义接口 AreaInterface,该接口有一个双精度浮点型的常量 PI,它的值等于 Math.PI;含 有一个求面积的方法 double area()。
- 定义一个 Rectangle(长方形)实现 AreaInterface 接口,该类有两个 private 访问权限的双 精度浮点型变量 x(长)和 y(宽);定义一个 public 访问权限的构造方法,用来给类变量赋 值;实现 area()方法得到长方形的面积;定义 toString()方法,返回一段字符串信息,内容如 下格式:“该长方形面积为:”+面积。
- 定义一个 TestArea 类,在它的 main()方法中;创建一个 Rectangle 的实例,长为 10.0,宽 为 20.0,输出它的面积。
题目 2.
- 定义接口 Shape,其中包括 area 方法。类 Circle、Square 和 Triangle 均实现了接口 Shape。 定义主函数,创建元素个数为 3 的 Shape 类型的一维数组,分别为数组元素创建 Circle、Square 和 Triangle 类型的对象,最后分别调用各数组元素的 area 方法,输出相关信息。
二、实验操作
前言
- 为了克服Java单继承的缺点,Java使用了接口
- 接口可以用来描述一种抽象。
- 接口可以用来实现解耦。
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());
}
}
结果如下
三、实验总结
- 理解抽象类和接口的联系和区别
- 掌握接口的继承与实现
- 进一步体会复杂系统中如何设计和使用抽象类和接口。
完成了以上三点,并且多注意在实现接口时的一些事项。