接口
引入
现实生活中,”接口“随处可见,比如我们熟悉的USB接口、插座等,手机、录像机要想通过USB接口与电脑连接,就要遵循USB接口的规范,而电脑则需要提供USB接口供手机、录像机插入使用
在Java语言中,接口中声明的方法即是使用该接口需要遵循的规范,而某一类如果想使用该接口,就需要重写接口中所声明的方法
介绍
接口中给出了一些没有实现的方法,将这些方法封装到一起,某个类要使用的时候,再根据具体情况把这些方法写出来
语法
- 声明一个接口
//声明一个接口
权限修饰符 interface 接口名{
//属性
//方法
}
- 使用接口
//使用接口
class 类名 implements 接口{
//属性
//方法(必须实现接口中的抽象方法)
}
//使用接口中声明的属性
接口.属性l
细节
- 接口的修饰符只能是:①public②默认,即和类的修饰符一样
- 在接口中,所声明的方法都要为public型的方法,所声明的抽象方法可以省略abstract关键字
- 接口中声明的方法可以有三种类型:①抽象方法②静态方法③默认方法(default修饰)
- 接口中的属性只能是final的,并且均用public static final修饰。如果没有显示的使用public static final修饰符,那么程序会默认使用public static final修饰(属性被static修饰,则可以直接通过接口名.属性名访问该属性,而被final修饰意味着属性值不能被修改)
- 接口不能被实例化(接口相当于定义了一系列的规范)
- 如果一个类实现该接口,就必须把接口中的所有方法都实现(alt+enter)
- 抽象类实现接口,可以不用实现接口的方法
- 一个类可以是实现多个接口
- 接口不能继承其他的类,但可以继承多个其他的接口
接口vs继承
接口可以理解为对单继承机制的一种补充,子类继承父类将继承父类中已有的功能,如果子类想添加一些额外的功能,可以通过接口的方式实现扩展(当然也可以在子类中声明)
- 接口与继承解决的问题不同,继承解决代码的复用性和可维护性,而接口主要是设计各种规范(方法),其他类可以去实现这些规范
- 接口(like a)比继承(is a)更灵活
- 接口在一定程度上实现代码解耦(接口的规范性+动态绑定机制)
接口的多态
-
多态参数:接口类型的变量可以指向实现了接口的类的实例
-
多态数组
-
接口的多态传递(相当于子类继承父类,父类再向上继承父类的父类,那么子类也继承了父类的父类)
应用场景
项目经理管理三个程序员,功能开发一个软件,为了控制和管 理软件项目经理可以定义一些接口,然后由程序员具体实现。