定义
接口就是一种公共的规范标准,只要符合规范标准,就可以大家通用
代码中,接口是多个类的公共规范,是一种引用类型,其中最重要的就是其中的抽象方法;
使用
格式:public interface 接口名称{}
编译生成的字节码文件仍然是:.java --> .class
包含的内容:
JDK7: 1、常量 2、抽象方法
JDK8新增:3、默认方法 4、静态方法
JDK9新增:5、私有方法
常量
定义格式
接口中也可以定义成员变量,使用 pulic static final 关键字修饰,从效果来看,这就是接口的常量(可以省略这三个关键字)
格式:[public] [static] [final] 数据类型 常量名称 = 数据值;
注意:
1、接口中的常量,可以省略这三个关键字,不写也这样
2、接口中的常量,必须进行赋值,不能不赋值
3、接口中的常量名称,使用完全大写的字母,用下划线进行分隔(推荐)
抽象方法:
定义格式
[public] [abstract] 返回值类型 方法名称(参数列表);
注意:
1、接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2、这两个关键字修饰符,可以选择性的省略
3、方法的三要素可以随意定义;
使用步骤
1、接口不能直接使用,必须有一个实现类来实现该接口
格式:public class 实现类名称 implements 接口名称 {}
2、接口的实现类必须覆盖重写(实现)接口中的所有抽象方法;
3、创建实现类的对象进行使用;
注意事项:
如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类就必须是抽象类
默认方法
定义格式
格式:[public] default 返回值类型 方法名称(参数列表){ //方法体 }
目的:解决接口升级的问题
使用步骤
1、接口的默认方法可以通过接口的实现对象直接调用(继承)
2、接口的默认方法也可以被接口实现类进行覆盖重写
静态方法
定义格式
格式:[public] static 返回值类型 方法名称(参数列表) { //方法体}
使用步骤
通过接口名称直接调用其中的静态方法
格式:接口名称.静态方法名称(参数列表);
注意:
1、不能通过接口实现类的对象来调用接口当中的静态方法
2、不能通过接口实现类对接口当中的静态方法进行覆盖重写
私有方法
定义格式
1、普通私有方法:解决多个默认方法之间重复代码问题
格式:private 返回值类型 方法名称(参数列表){ //方法体 }
2、静态私有方法:解决多个静态方法之间重复代码问题
格式:private static 返回值类型 方法名称(参数列表){ //方法体 }
使用步骤
接口中直接调用(只能在接口中使用)
使用注意事项
1、接口没有静态代码块和构造方法
2、一个类的直接父类有且只有一个,但是一个类可以同时实现多个接口
格式:public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB{}
3、如果实现类所实现的多个接口中,存在重复的抽象方法,那么只需要覆盖重写一次即可
4、如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类
5、如果实现类所实现的多个接口中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写
6、一个类如果直接父类中的方法和接口中的默认方法产生了冲突,优先用父类中的方法
7、如果实现类所实现的多个接口中,存在重复的静态方法,因为静态方法调用格式为:接口名称.静态方法名称,因而没有影响
接口、类之间的继承实现关系
1、类与类之间是单继承的,直接父类只有一个
2、类与接口之间是多实现的,一个类可以实现多个接口(要覆盖重写冲突)
3、接口与接口之间是多继承的
注意:
1、多个父接口当中的抽象方法如果重复,没关系
2、多个父接口当中的默认方法如果重复,子接口必须进行默认方法的覆盖重写,而且带着default关键字
3、多接口继承时,要避免出现抽象方法名称相同、参数列表相同、返回值类型不同的的方法,会出现方法定义重复。