1. 什么是接口
接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。
2. 接口语法:
public interface MyInterface {
public void foo();
//其他方法
}
3. 如何使用接口
public class UDisk implements UsbInterface {
public void service() {
System.out.println("连接USB口,开始传输数据。");
}
}
4. 接口的特性
Ø 接口不可以被实例化。
Ø 实现类必须实现接口的所有方法。
Ø 实现类可以实现多个接口。
Ø 接口中的变量都是静态常量。
5. 接口表示一种能力
体现在接口的方法上,满足has a的关系。
程序设计时:
Ø 关心实现类有何能力,而不关心实现细节。
Ø 面向接口的约定而不考虑接口的具体实现。
6. JDK8新增的接口特性
1. JDK1.8后,接口里可以有默认方法(方法体)了
default关键字-默认方法
➢默认方法可以被继承,通过实例调用
➢如果一个类实现了多个接口,多个接口都定义了多个同样的默认方法
方案一:实现类需要覆盖重写接口中的默认方法不然会报错
方案二:可以使用super来调用指定接口的默认方法
➢如果一个类继承了一一个抽象类,实现了一一个接口,抽象类和接口存在相同的方法
采取类优先的原则,优先继承抽象类的方法
➢接口默认方法可以有多个
2. JDK 1.8后,接口里可以声明(并且可以提供实现)的静态方法了
➢接口中的静态方法必须是public的, public修饰符可以省略, static修饰符不能省略
➢静态方法不能被继承及覆盖,所以只被具体所在的接口调用
➢接口中静态方法可以有多个
7. 抽象类和接口
相同点:
◆代表系统的抽象层
◆都不能被实例化
◆都能包含抽象方法
用于描述系统提供的服务,不必提供具体实现
不同点:
◆在抽象类中可以为部分普通方法提供默认实现, JDK8之前接口中只能包含抽象方法, JDK8之后接口可包含默认方法
◆一个类只能继承一个直接的父类,但可以实现多个接口
使用原则:
◆is a --抽象类; has a --接口
◆接口做系统与外界交互的窗口
➢接口提供服务
◆接口本身一旦制定,就不允许随意修改
◆抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点
◆抽象类便于复用,接口便于功能扩展和维护