一、前言
- 在现实生活中,常常需要一些规范和标准,如汽车轮胎坏了,只需要更换一个同样规格的轮胎,计算机的硬盘要升级,只需要买一个有同样接口和尺寸的硬盘进行更换,而一个支持USB接口的设置如移动硬盘、MP3、手机等都可以插入计算机的USB接口进行数据传输。这些都是由于有一个统一的规范和标准,因此轮胎之间可以互相替换,移动硬盘和手机通过USB可以互相连接。
- 在软件开发领域,也可以定义一个接口规定一系列规范和标准,继承同一接口的程序也就遵循同一种规范,这样程序可以互相替换,便于程序的扩展。
二、资源背景
- 基于jdk8
- 使用软件:eclipse
三、接口和抽象类的区别
- 接口可以实现多继承,类只允许单继承。
- 接口:只包含常量及抽象方法(JDK7之前);成员默认为public;默认变量为final; 抽象方法可以不加abstract,默认abstract;
- 类:可以包含有一般成员,也可以包含有抽象方法;成员可以是private,protected,public;可以包含非final的变量;抽象方法一定要加abstract。
四、接口实现实例
- 设计一个IShape接口,和他的三个实现类:Square,Rectangle,Circle;
- IShape中有两个方法:area方法用于返回面积,perimeter方法用于返回周长。
- 在测试类创建计算边长为2的正方形对象,创建长为5,宽为2.5的长方形对象,创建半径为3的圆形对象,分别计算他们的面积和周长。
五、接口定义格式
[访问修饰符] interface 接口名[extends 接口1,接口2,...]{
常量
抽象方法
}
六、接口的实现
格式:[访问权限] class 类名 implements 接口名1,接口名2,...{
类体
}
- 一个类可以实现多个接口,在implements后列出需要实现的接口名;
- 如果某个类不是abstract类型,那么类要实现该接口的所有抽象方法;
- 在类中实现接口的抽象方法中,必须与接口中定义的方法头完全一致即方法名、返回值类型及形参列表要完一致。如果方法名相同,但参数不同,则不是实现接口的抽象方法,而是定义新的方法。
七、抽象类和接口的选择
- 抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
- 抽象类偏重于IS-A式的关系,而接口着重于CAN-DO关系类型。
- 抽象类多定义对象的属性,而接口多定义对象的行为。
- 例如:人会奔跑,狗会奔跑,他们都继承了同一个接口“奔跑”;铁门和木门都是门(抽象类)
八、案例
设计一个IShape接口和它的三个实现类,要求如下:
- Ishape接口中有两个方法,area方法用于返回面积,perimeter方法返回周长
- 正方形类Square、长方形类Rectangle和圆类Circle实现了接口中的抽象方法,计算了正方形、长方形及圆形的面积、周长。
在测试类中创建计算边长为2的正方形对象,创建长为5、宽为2.5的长方形对象,创建半径为3的圆形对象,分别计算它们的面积、周长。
1.创建接口IShape和两个抽象方法
public interface IShape {
public abstract double area();
public abstract double perimeter();
}
2.创建Square类实现接口IShape并重写两个方法计算正方形的面积和周长
public class Square implements IShape{
private double length;
public Square(double length) {
this.length=length;
}
@Override
public double area() {
return length*length;
}
@Override
public double perimeter() {
return length*4;
}
}
3.创建Rectangle类实现接口IShape并重写方法计算长方形的面积和周长
public class Rectangle implements IShape{
private double length;
private double width;
public Rectangle(double length,double width) {
this.length=length;
this.width=width;
}
@Override
public double area() {
return length*width;
}
@Override
public double perimeter() {
return (length+width)*2;
}
}
4.创建Circle类实现接口IShape并重写两个方法计算圆的面积和周长
public class Circle implements IShape{
private double radius;
public Circle(double radius) {
this.radius=radius;
}
@Override
public double area() {
return 3.14*radius*radius;
}
@Override
public double perimeter() {
return 2*3.14*radius;
}
}
5.创建一个测试类计算各个形状的面积和周长
public class TestIShape {
public static void main(String[] args) {
Square s1=new Square(2);
System.out.println("正方形面积:"+s1.area());
System.out.println("正方形周长:"+s1.perimeter());
Rectangle r1=new Rectangle(5, 2.5);
System.out.println("长方形面积:"+r1.area());
System.out.println("长方形周长:"+r1.perimeter());
Circle c1=new Circle(3);
System.out.println("圆面积:"+c1.area());
System.out.println("圆周长:"+c1.perimeter());
}
}
6.结果
九、总结
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为或者是功能。在接口里面不能创建对象,用过implement对接口进行实例化。
感谢各位读者的阅读,文章作者技术和水平有限,如果文中出现错误,希望大家能指正!