一、接口
1.接口是什么呢?
接口:就是一种公共规范标准,在java中接口就是用来封装方法的
接口的特点:
1.接口是一种引用数据类型
2.接口中只能定义常量和方法(抽象方法,默认方法,静态方法,私有方法(jdk9))
3.接口中不能定义成员变量和构造方法
4.接口不能创建对象,只能通过其实现类来使用
5.接口中,没有静态代码块
2.定义接口的格式
public interface 接口名称 {
//常量
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}
如何实现接口:
实现接口:
1.创建一个类
2.实现该接口
public class 类名 implements 接口名{
}
接口中的成员:
- 常量:
默认修饰符:public static final
1.接口中的常量可以供接口直接使用
2.接口中的常量可以供子类和子类对象使用
final: 关键字,表示终态的意思,如果修饰变量,该变量就变成常量
常量:使用public static final修饰的
含有抽象方法
如何在接口中定义抽象方法和使用抽象方法:
接口中定义抽象方法:
public abstract 返回值类型 方法名(形参);
返回值类型 方法名(形参);
如何使用抽象方法:
接口中的抽象方法注意就是供子类(实现类)重写的
注意:
接口的实现类如果是普通类,那么必须重写抽象类中的所有抽象方法
接口的实现类如果是抽象类,那么可以不用重写抽象类中的抽象方法
- 含有默认方法
默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。
默认方法:需要加default
格式:
public default 返回值类型 方法名(形参){
}
1.接口中的默认方法可以供子类对象调用
2.接口中的默认方法可以供子类重写,但是重写的时候不需要加 default
接口中默认方法的使用:在实现类中使用或者实现类对象来使用 - 含有静态方法
静态方法:使用 static 修饰,供接口直接调用。
public static 返回值类型 方法名(参数列表){
}
静态方法只能供接口直接使用,实现类不能使用
接口中静态方法的使用:只能供接口直接使用 - 含有私有方法
私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。
private 返回值类型 方法名(参数列表){
} - 私有静态方法
private static 返回值类型 方法名(参数列表){
}
私有方法只能在接口中直接使用
私有非静态方法: 供默认方法使用,私有非静态方法直接使用
私有静态方法: 供默认方法使用,静态方法,私有方法直接使用
3.基本的实现
实现: 类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements关键字。
非抽象子类实现接口:
1. 必须重写接口中所有抽象方法。
2. 继承了接口的默认方法,即可以直接调用,也可以重写。
实现格式:
class 类名 implements 接口名 {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【可选】
}
抽象方法的使用
必须全部实现。
默认方法的使用
可以继承,可以重写,二选一,但是只能通过实现类的对象来调用。
静态方法的使用
静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用。
私有方法的使用
私有方法:只有默认方法可以调用。
私有静态方法:默认方法和静态方法可以调用。
4.接口和类之间的关系接口和类之间的关系:实现关系
单实现:一个类实现一个接口
多实现:一个类实现多个接口
格式:
public class 类名 implements 接口1,接口2,...{
}
注意:
1.如果多个接口中有同名的抽象方法,那么实现类只需要实现一次即可
2.如果多个接口中有同名的默认方法,那么实现类必须重写一次,并且要去掉default关键字
3.如果多个接口中有同名的静态方法,那么实现类无须理会,因为接口中的静态方法只供接口直接使用
4.如果多个接口中有同名的私有方法,那么实现类无须理会,因为接口中的私有方法只能在本接口中使用
5.接口和接口之间的关系
接口和接口之间的关系: 继承关系
单继承:一个接口继承一个接口
多继承:一个接口同时继承多个接口
多层继承:一个接口继承另一个接口,而另一个接口又继承另一个接口
单继承:
public interface 接口A extends 接口B{
}
接口A: 子接口
接口B: 父接口
多继承:
public interface 接口A extends 接口B,接口C,...{
}
接口A: 子接口
接口B\C…: 父接口
注意1:
1.如果多个父接口中有同名的抽象方法,那么实现类只需要实现一次即可
2.如果多个父接口中有同名的默认方法,那么子接口必须重写默认方法,必须要加default关键字
3.如果多个父接口中有同名的静态方法,那么无须理会,因为静态方法只能供接口使用
4.如果多个父接口中有同名的私有方法,那么无须理会,因为私有方法只能本接口使用
注意2:
子接口重写父接口的默认方法,必须加default关键字
实现类重写接口中的默认方法,必须去掉default关键字
继承与实现存在优先级的问题
优先级的问题
一个类既可以继承另一个类,也可以实现多个接口
格式:
public class 类名 extends 父类名 implements 接口名1,接口名2,...{
}
注意:
1.如果接口和父类中有同名的默认方法,优先调用父类的默认方法
2.如果接口和父类中有同名的抽象方法,那么子类必须重写一次抽象方法
普通类: 成员变量,构造方法,成员方法,静态代码块
抽象类: 成员变量,构造方法,成员方法,静态代码块,抽象方法 —> 不能直接创建对象
接口: 常量,默认方法,静态方法,私有方法,抽象方法 —> 不能直接创建对象
一个类只能继承一个父类,但是一个类可以实现多个接口
一般父类使用抽象类,一般一个类需要扩展功能就实现接口