目录
1 接口的概述
接口是一种规范,是一种规则。
通俗的讲就是,接口就是相当于把房子的框架搭好了,后续过程只要往添加各个部分的东西就好了。Java中则是 通过实现类去实现接口中的定以好的功能体。
2 接口的书写格式
//注意:有继承的时候,接口要写在继承的后面;
public interface 接口名 {
}
3 接口的特点
- 接口名用 interface 修饰
- 实现类用implements 修饰
public class 类名 implements 接口名{
}
- 接口不能实例化
- 接口的实现类要么重写接口的所有抽象方法,要么是一个借口或者是抽象类
- 接口关系中,实现类可以对接口进行单实现,也可以多实现
4 接口成员特点
- 构造方法:没有
- 成员变量:虚拟机默认添加public static final 修饰,注意一点是变量必须要赋值
- 成员方法:JDK8以前只有抽象方法, JDK8 加入 静态方法和默认方法, JDK9 加入了私有方法
5 类与类、类与接口、接口与接口之间的关系
- 类与类:
- 继承关系:单继承,多层继承
- 类与接口:
- 实现关系:可以单实现,也可以多实现,也可以有继承的时候进行实现多个接口
- 接口与接口:
- 继承关系:可以单继承,也可以多继承
6 成员方法的介绍
6.1抽象方法
抽象方法实现类是要全部重写的
public void eat() ;
6.2 默认方法
JDK8 出现的方法,用default修饰
6.2.1 书写格式
如下
//在接口中
public default void 方法名(){}
public default 返回值类型 方法名(){
return 返回值;
}
注意事项:
对于默认方法,实现类可以重写也可以不重写,重写的时候要去掉default关键字。
在接口中默认方法的修饰词,public 可以省略, default不能省略。
存在的意义:
解决接口升级问题,提高拓展性。
6.2.2 调用方式
通过实现类调用
//在其他非抽象类中
类名 对象名 = new 类名();
对象名.方法名();
注意:
- 如果实现了多个接口 中 有相同的 默认方法, 这时候实现类中必须重写方法
-
接口中的default方法 不能用 接口名.方法名的方式调用, 也就是只能通过 创建实现类对象 然后用对象调用
6.3 静态方法
JDK8 出现的方法,用static修饰
6.3.1 书写格式
//在接口中
public static void 方法名(){}
public static 返回值类型 方法名(){
return 返回值;
}
6.3.2 调用方式
//在其他非抽象类中
接口名.方法名();
注意事项:
-
接口中的静态方法只能通过接口名调用, 不能通过类 和对象名调用
-
public 可以省略, static 不能省略
-
接口中的static 不能被重写, 也就是说,静态方法和 实现类没有任何关系
6.4 私有方法
6.4.1 书写格式
//接口中
private 返回值类型 方法名(){}
private static 返回值类型 方法名(){}
6.4.2 调用方法
//在接口中
方法名();
三种方法对比:
方法 | 调用方式 |
---|---|
default 默认方法 | 在其他类创建实现类的对象调用,给实现类用 |
static 静态方法 | 只能通过接口名调用,专为给其他类用的 |
private 私有方法 | 只能接口内部使用,专为给接口自己用的 |
7 使用思路
-
如果一个类中的方法都是抽象方法就可以定义为接口
-
接口更新 时不想 修改每个类 , 这是可以 加入 有方法体的默认方法
-
希望调用方式简洁的 可以使用静态方法(因为静态方法是 接口名直接调用的) ( 需要去掉 default 关键字)
-
接口中有大量的私有方法可以考虑抽取出 private的私有方法 ( 需要去掉 default 关键字 )