public interface 接口名称 {
// 接口内容
}
Java7中接口可以包含的内容有:
1.常量
2.抽象方法
Java8中接口可以包含的内容有:
3.默认方法
4.静态方法
Java9中接口可以包含的内容有:
5.私有方法
public abstract 返回值类型 方法名(参数列表);
接口的方法是隐式抽象,修饰符只能是public abstract(可以不写)。
1.接口不能直接使用,必须实现。
2.接口的实现类必须覆盖重写也叫(实现)接口中的所有抽象方法。
3.创建实现类的对象,来使用。 格式:XXXXXXImpl impl = new XXXXXXImpl();
实现类格式:
public class 实现类名称 implements 接口名称 {
// ...
}
接口名 :XXXXXX
接口实现类名:XXXXXXImpl
默认方法就是接口可以有实现方法,而且不一定需要实现类去实现其方法。
调用默认方法时,如果实现类中有就调用实现类中的,没有就向上找接口中的。
格式:public关键字可省略
public default 返回值类型 方法名称(参数列表){
方法体
}
为什么要有这个特性?
首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的 java 8 之前的集合框架没有 foreach 方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。
格式:public关键字可省略
public static 返回值类型 方法名称(参数列表){
方法体
}
接口里静态方法使用:
通过接口名称,直接调用其中静态方法。
格式:接口名称.静态方法名(参数);
注意:不能通过接口实现类的对象来调用接口当中的静态方法。
错误:
XXXXXXImpl impl = new XXXXXXImpl();
impl.静态方法名(参数);
用来解决多个默认方法(或是多个静态方法)中有重复代码的问题。
1.普通私有方法,解决多个默认方法之间重复代码问题。
格式:
private 返回值类型 方法名称(参数列表){
方法体
}
2.静态私有方法,解决多个静态方法之间重复代码问题。
private static 返回值类型 方法名称(参数列表){
方法体
}
接口中的常量的修饰符只能是public static final(三个关键字可省略)。
接口中的常量必须赋值。
接口中的常量的名称,使用大写字母,词组使用_分割。(推荐命名规则)
格式:
public static final 数据类型 常量名称 = 值;
1.接口没有静态代码块和构造方法。
2.一个类可以同时实现多个接口。
格式
public class XXXXXXImpl implements InterfaceA,InterfaceB {
覆盖重写所有抽象方法。
}
3.如果实现类所实现的多个接口中,有重名抽象方法,实现类重写一次即可。
4.如果实现类没有覆盖重写接口中的所有抽象方法,那么实现类必须是抽象类。使用abstract修饰。
5.如果实现类所实现的多个接口中,有重名默认方法,实现类一定要对冲突的默认方法进行重写。
6.一个类继承的父类当中的方法和接口中的默认方法产生冲突,优先调用父类中的方法。继承优先接口实现。
1.类与类之间是单继承,直接父类只有一个。
2.类与接口之间是多实现,一个类可以实现多个接口。
3.接口与接口之间是多继承。
格式:
public interface 子接口名 extends 接口A名,接口B名 {
}
注意:多个父接口中的默认方法重复,子接口必须进行默认方法重写。