概念
接口可以看作一个特殊的纯抽象类(因为它可以有静态方法和默认方法,不能说它是百分百抽象的),它将一些方法封装到一起,起到了类的蓝图的作用,接口体现了程序设计的多态和高内聚低耦合的设计思想。
语法:修饰符 interface接口名{//属性//方法}
作用
- Java可以通过实现接口来弥补它不支持多继承的局限。
- 用来实现解耦。
- 用来实现抽象。
特点
- JDK8之前,接口中的方法都没有方法体,JDK8.0后接口类可以有静态方法,默认方法(加default修饰符),也就是说接口中可以有方法的具体实现。接口的静态方法属于接口,可以用
接口名.静态方法;
调用(默认方法的最典型用法是逐步为接口提供附加功能,而不破坏实现类。) - 接口不能被实例化
- 接口中所有的方法默认都是public方法(默认的,可以不写修饰符),接口中抽象方法,可以不用abstract修饰符修饰
- 一个普通类实现接口,就必须将该接口的所有非静态方法都实现
- 抽象类实现接口,可以不用实现接口的方法
- 接口里定义的变量只能是公共的静态的常量,且变量的定义前隐含了public static final,通过
接口名.属性名
访问 - 接口允许多重继承,没有成员变量;抽象类可以继承成员变量,却不能多重继承,类通过
class 类名 implements 接口A,接口B...{}
继承(实现)多个接口 - 接口不能继承其他的类,可以继承多个别的接口,接口通过
interface 接口名 extends 接口A,接口B...{}
继承多个接口 - 接口的修饰符只能是 public和默认,但是修饰符为public时,java文件名要和接口名一样,这点和类的修饰符一样。
总的来说,接口就是一个特殊的抽象类,它们的区别主要在于成员变量(特点6)和成员方法 (1,3)的访问特性以及多继承(7,8)的差别
接口的多态
即接口的引用可以指向实现了接口的类的对象
接口和类一样,存在多态传递,比如接口B extends 接口A,当一个类实现接口B时,也要把接口A里的抽象方法实现
接口和继承的区别
接口是对于方法的抽象,不是对于一类事物的抽象,它比继承更加灵活,继承是满足is - a的关系,而接口只需满足like - a的关系。实现接口的类可以是不相关的类,只是它们都具有某种表现不同的行为而已比如鱼,狗,猴子都可以实现游泳这样的接口。
接口的价值主要在于设计,设计好各种规范(方法),让其它类去实现这些方法。接口在一定程度上实现代码解耦
而继承中的抽象类,是对行为和属性的抽象,是多个类(事物)共同的抽象,比如香蕉苹果梨这多个事物可以抽象为水果类。类的继承需要满足is - a的关系