一、接口概念
接口就是多各类的公共规范,一种引用数据类型
接口定义格式:
public interface 接口名称{
//接口内容
}
换成了关键字interface之后,编译生成的字节码文件仍然是从 .java->.class 文件格式的转换
如果是Java7,接口内容中可以有:
1.常量
2.抽象方法
如果是Java8,接口内容中可以有:
3.默认方法
4.静态方法
如果是Java9,接口内容中可以有:
5.私有方法
二、接口抽象方法
1.接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2.这两个修饰符关键字,可以省略(部分或全部)
3.方法的三要素可以根据业务随意定义
public interface interfaceAbs{
//以下定义抽象方法的方式均正确
public abstract void method();
abstract void method();
public void method();
void method();
}
三、接口使用
1.接口不能直接使用,必须有一个“实现类”来“实现”该接口,实现格式为:
public class 实现类名称 implements 接口名称{
//实现类内容
}
2.接口的实现必须覆盖重写(实现)接口当中的所有抽象方法,在实现类中实现接口中的抽象方法时,需要去掉原本的abstract关键字,并加上方法体-->{ 方法体 }。
3.不能直接new接口。
4.如果实现类并没有覆盖重写接口中的所有抽象方法,该实现类自身必须是抽象类。
四、接口的默认方法
1.从Java8开始,接口中可以定义默认方法,其定义方式为:
[public] default 返回值类型 方法名称(参数列表){
//方法体
}
2.默认方法可以实现接口升级,解决为业务需要为接口新增抽象方法时,导致原有的实现类此时报错的问题,默认方法有方法体,因此实现类可以不去重写实现。
3.默认方法可以被实现类继承,如果实现类当中没有,则向上找。
4.默认方法可以被实现类覆盖重写。
五、接口的静态方法
1.接口静态方法定义方式:
[public] static 返回值类型 方法名称(参数列表){
//方法体
}
2.静态方法不能通过接口实现类的对象调用,应该是直接通过:接口名称.静态方法名称(参数)的方式来调用。
五、接口的私有方法
1.普通私有方法:解决多个默认方法之间代码重复的问题
private 返回值类型 方法名称(参数列表){
//方法体
}
2.静态私有方法:解决多个静态方法之间代码重复的问题
private static 返回值类型 方法名称(参数列表){
//方法体
}
六、接口的常量
1.必须使用public static final修饰。
[public] [static] [final] 数据类型 常量名称 = 数据值
2.一旦使用final关键字修饰,则不可以再改变。
3.接口当中的常量可以省略public static final,不写也表示的同一个意思。
4.接口当中的常量必须进行赋值,不能不赋值。
5.接口中的常量要用大写,多个单词用下划线连接
七、继承父类并实现多个接口
1.接口没有静态代码块或者构造方法
2.一个类的直接父类是唯一的,但是一个类可以实现多个接口
public class 类名称 implements 接口A,接口B,......{
//类内容
}
3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
4.如果实现类没有覆盖重写多有接口当中的所有抽象方法没那么实现类就必须是一个抽象类。
5.如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
6.如果直接父类当中的方法和接口当中的默认方法产生了冲突,则优先使用父类当中的方法。
八,接口之间的多继承
1.类与类之间是单继承的,直接父类只有一个。
2.类与接口是多实现的,一个类可以实现多个接口。
3.接口与接口直接是多继承的。
1)多个父接口当中的抽象方法重复,没关系
2)多个父接口当中的默认方法重复,子接口必须进行默认方法的重写,而且需要带default关键字