定义
Java中的接口就是功能的封装, 用来扩展类的功能。接口也可以理解为一组操作规范,或者是一个协议。
[修饰符] interface 接口名 {
功能(接口中的方法默认使用public abstract修饰)
}
实现
-
接口中方法默认使用public abstract修饰, 一般情况下接口中只有抽象方法。
接口中还可以定义public static final常量 , public static 方法, public default方法。
public interface MyInterface { void m1(); //接口中方法默认使用public abstract修饰, 一般情况下接口中只有抽象方法。 int n = 88; //接口中字段默认使用public static final修饰 public static void func1() { //接口中可以定义静态方法,通过接口名调用 //方法体 } public default void func2() { //接口中方法如果使用default修饰,在接口中可以有磨人的方法体,实现类可以重写该方法,也可以不重写 //方法体 } }
-
类实现了接口,需要重写接口的抽象方法, 如果没有重写接口中所有的抽象方法,实现类需要定义为抽象类。
-
接口是一种引用数据类型, 可以定义变量, 但是接口不能实例化对象, 接口引用需要赋值实现类对象, 或者接口的匿名内部类对象。
-
接口多态, 接口引用调用接口中抽象方法,实际上执行的是实现类对象的方法。接口存在就是为实现多态的。
-
一个类可以同时实现多个接口, 需要重写所有接口的所有抽象方法。
-
接口也支持继承,并且接口支持多继承
-
接口的引用可以被匿名内部类对象赋值
-
方法的形参是接口,在调用的时候可以传递匿名内部类对象。
口与抽象类的异同点
相同:
- 都可以定义抽象方法
- 都不能实例化对象
- 定义的抽象方法都需要被重写
- 都可以定义public static 方法,public static final 常量
不同:
- 意义不同
- 抽象类是对实物更高级的抽象
- 接口是对功能的封装
- 定义方式不同
- 抽象类用abstract
- 接口用interface
- 内容不同
- 抽象类中除了抽象方法外,还可以定义构造方法等普通类中定义的所有成员。
- 接口中只能定义:
- 抽象方法
- public static 方法
- public default方法
- final 常量
- 使用方式不同
- 抽象类需要被子类继承(extends)
- 接口需要被实现类实现(implements)
- 类只支持单继承,接口支持多继承
- 应用场景不同
- 一般情况下, 对类进行功能的扩展,优先选择接口
- 除了扩展功能外, 还需要保存不同的数据,只能选择抽象类; 抽象类还可以约束所有的子类都具有相同的功能(子类必须重写抽象类的方法)
接口的应用
-
使用接口来封装功能(操作)
-
接口可以定义一组操作规范
如开发某个项目时, 在相似模块中有一些操作是相同的, 可以把这一组相同的操作封装在一个接口中,就相当于通过接口定义了一个操作规范
提倡面向接口编程
-
接口使用比较灵活,一个类在继承父类的同时,可以实现多个接口
-
接口比较容易拓展,接口引用可以赋值各种实现类的对象,经常把接口引用作为方法形参,在调用方法时,可以传递各种实现类对象
-
接口可以使项目分层
分析项目不分层的弊端