接口就是多个类的公共规范
接口就是一种引用数据类型,最重要的内容就是:抽象方法
格式:
public interface 接口名称{ 接口内容 }
编译生成的字节码文件还是 .class
接口可以包含的内容:
1.常量
2.抽象方法 (Java7)
3.默认方法
4.静态方法 (Java8)
5.私有方法 (Java9)
注意事项:
1.接口中的抽象方法,修饰符必须是 public abstract
2.这两个关键字修饰符,可以都省略不写,或者省略一个,也是抽象方法
3.方法三要素可自由定义
接口使用步骤:
1.接口不能直接使用,必须有“实现类”来“实现”该接口
格式:
public class 类名称 implements 接口名称 {}
2.接口的实现类必须覆盖重写(实现)接口中的所有抽象方法
实现:去掉 abstract ,加上方法体大括号
3.创建实现类的对象,进行使用 (可以Impl)
如果实现类并没有覆盖重写接口中的所有抽象方法,那么这个实现类自己就必须是抽象
关于接口中的默认方法:(解决接口升级,所有实现类报错的问题)
格式:
public default 返回值类型 方法名称(参数列表){ 方法体 }
其中 public 可写可不写
接口默认方法,可以通过接口实现类对象直接调用;也可以被接口实现类进行覆盖重写
关于接口中的静态方法:
格式:
public static 返回值类型 方法名称 (参数列表) { 方法体 }
public 可写可不写
不能通过接口实现类的对象直接调用接口中的静态方法
正确方法:接口方法 . 静态方法名(参数);
关于接口中的私有方法:(解决默认方法中的重复代码问题,私有化的,不让实现类使用 Java 9 开始)
1.普通私有方法:解决多个默认方法间重复代码问题
private 返回值类型 方法名称(参数列表){ 方法体 }
2.静态私有方法:解决多个静态方法间重复代码问题
private static 返回值类型 方法名称(参数列表){ 方法体 }
接口的常量:格式:
piblic static final 数据类型 常量名称 = 数据值;
一旦使用 final 修饰,就说明不可改变
1.public static final 可以省略
2.接口常量必须赋值
3.接口常量名称,必须使用完全大写的字母,用下划线进行分割
ps
1.接口没有静态代码块或者构造方法
2.一个类直接父类是唯一的,但是一个类可以同时实现多个接口
3.重复的抽象方法只需要写一个
4.所有的抽象方法必须重写,不然就必须是抽象类
5.若多个接口的默认方法冲突了,则实现类必须对其重写
6.一个类的直接父类方法,和接口中的默认方法发生冲突,则优先使用父类的方法
7.多个父接口之间的抽象方法重复,没有关系;若是默认方法重复,则子接口必须重写