概念
很多时候,我们实际上关心的,并不是对象的类型,而是对象的能力
Java使用接口这个概念来表示能力
作用
双方对象并不直接互相依赖,它们只是通过接口间接交互
使用
- 定义接口
interface关键字声明接口,修饰符一般都是public。
interface后面就是接口的名字MyComparable。
接口定义里面,声明了一个方法compareTo,但没有定义方法体,接口都不实现方法。接口方法不需要加修饰符,加与不加都是public的,不能是别的修饰符。
compareTo方法
方法的参数是一个Object类型的变量other,表示另一个参与比较的对象。
第一个参与比较的对象是自己
返回结果是int类型,-1表示自己小于参数对象,0表示相同,1表示大于参数对象
-
实现接口
implements关键字表示实现接口,前面是类名,后面是接口名。
实现接口必须要实现接口中声明的方法,Point实现了compareTo方法
Point的compareTo实现
Point不能与其他类型的对象进行比较,它首先检查要比较的对象是否是Point类型,如果不是,使用throw抛出一个异常
如果是Point类型,使用强制类型转换将Object类型的参数other转换为Point类型的参数otherPoint。
这种显式的类型检查和强制转换是可以使用泛型机制避免的
- 使用接口
接口不能new,不能直接创建一个接口对象,对象只能通过类来创建。但可以声明接口类型的变量,引用实现了接口的类对象
针对接口而非具体类型进行编程,是计算机程序的一种重要思维方式
代码复用
更重要的是降低了耦合,提高了灵活性
接口的细节
- 接口中的变量
接口中可以定义变量
修饰符是public static final,但这个修饰符是可选的,即使不写,也是public static final
- 接口的继承
接口也可以继承,一个接口可以继承别的接口,继承的基本概念与类一样,但与类不同,接口可以有多个父接口
- 类的继承与接口
类的继承与接口可以共存
- instanceof
与类一样,接口也可以使用instanceof关键字
使用接口替代继承
使用接口,针对接口编程,可以实现统一处理不同类型的对象,但接口没有代码实现,无法复用代码。将组合和接口结合起来,就既可以统一处理,也可以复用代码了