##1.概述
如果一个类中所有的方法都是抽象方法,则可以将此类定义为接口.
接口:其实也是另外一种引用数据类型
##2.接口的定义
接口定义需要interface关键字
public interface接口名{
}
特点
- 类和接口的关系:是实现的关系,通过**implements关键字表示,实现了该接口的类我们常常也将其称之为子类,并且一个类可以实现多个接口**。格式如下所示:
class 类名 implements 接口名1 , 接口名2 , ... {}
- 接口不能实例化(不能直接通过new关键字直接去创建接口的对象)
- 接口中不存在构造方法
- 接口的子类可以是抽象类也可以是具体的类,但是要求具体的类必须重写接口中所有的抽象方法
成员特点
成员变量:存在默认的修饰符:public static final
成员方法:都是抽象方法(JDK1.7之前包含JDK1.7),存在默认的修饰符:public abstract
构造方法:不存在构造方法
新特性
默认方法
从JDK1.8以后JDK提供了很多关于接口的一些新特性。
JDK1.8以后可以支持在接口中去定义非抽象方法,但是这个方法需要通过default关键字进行修饰,那么这样的方法就是默认方法。
产生背景
Jdk1.7之前我们接口中只能定义抽象方法,那么大家试想一下,随着业务的不断增加,我们这个接口可能会衍生出来了很多个实现类;那么现在我们需要对接口进行增强,也就是在接口中去
添加一个抽象方法,那么我们就必须在所有的实现类中去重写该抽象方法,这样就会造成对这个接口的升级带来了很大的不便;为了解决这个问题,Jdk1.8以后就允许在接口中定义非抽象方
法,但是需要使用关键字default修饰,这些方法就是默认方法;
定义格式:
格式:public default 返回值类型 方法名(参数列表) { }
范例:public default void show() { }
注意事项:
1、默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字
2、public可以省略,default不能省略
3、如果实现了多个接口,多个接口中存在相同的默认方法声明,子类就必须对该方法进行重写
静态方法
定义格式:
public static 返回值类型 方法名(参数列表) { }
public static void show() { }
注意事项:
1、静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
2、public可以省略,static不能省略
私有方法(JDK9以后)
概述:就是在定义方法的时候把方法的修饰符定义为private,并且不需要定义default关键字。
格式:
private 返回值类型 方法名(参数列表){}
应用场景:如果多个默认方法或者静态方法中存在相同的代码,此时就可以相同的代码抽取到一个静态方法中,供默认方法和静态方法进行调用。
类和接口之间的关系
类与类之间的关系: 类与类之间是继承的关系,在Java中只能是单继承不能是多继承,但是可以多层继承。
类与接口之间的关系: 类与接口之间是实现的关系,可以是单实现也可以是多实现,并且一个类可以在继承某一个类的同时去实现多个接口。
接口与接口之间的关系: 继承的关系,可以是单继承也可以多继承