1.为什么要有接口
看下面这个情况,游泳写到父类肯定不合适,但是如果写到每一个子类中格式又会不统一,所以就需要一个游泳的接口。
- 接口其实就是一种规则。更侧重于行为,学生也可以拥有这个行为(对行为的抽象)
2. 接口的定义与使用
-
public interface 接口名{} -
接口不能实例化(创建对象)
-
接口和类是实现关系,
public class 类名 implements 接口名{} -
接口的子类(也叫实现类),要么重写接口中的重写方法,要不就是抽象类
-
接口和类也可以多实现
public class 类名 implements 接口名1 , 接口名2 {} -
实现类也可以在继承一个类的同时实现多个接口
public class 类名 extends 父类 implements 接口名1 , 接口名2 {}
3.接口中的成员特点
3.1 成员变量
- 只能是常量
- 默认修饰符:public static final (static的作用是方便调用,用接口名.常量名称;final的作用是保证不被修改)
3.2 构造方法
- 没有
3.2 成员方法
- jdk7以前只能是抽象方法
- 默认修饰符 public abstract
- 后面版本也可以定义私有方法
4. 接口与接口的关系
- 继承关系,可以单继承,也可以多继承
- 比如Inter1中有一个抽象方法method1 Inter2中有method2
public interface Inter3 extends Inter1,Inter2{
public abstract void method3();
}
那么当实现类去实现Inter3,要把1和2的抽象方法也重写
5. JDK8和JDK9的接口
5.1 为什么要改变?
- 比如下面这种情况,一旦接口里面多了个规则,使用接口的类都要修改,要不立马报错,为了解决这个问题(即又想添加新的规则,又想不报错)
5.2 JDK8新特性
- JDK8允许接口中定义默认方法,需要用default修饰
- 默认方法不是抽象方法,不强制被重写,但是如果被重写,重写的时候去掉default关键字。
- public可以省略,default不可以
- 如果实现了多个接口,存在相同名字的默认方法,子类就必须重写该方法。
- JDK8也允许在接口中定义静态方法,需要用static修饰。
public static void show{}- 静态方法只能通过接口名调用
5.3 JDK9新特性
- 作用:避免重复代码过多,但是是在接口内部使用的,所以让外界访问没有意义。
- 普通的私有方法,给默认方法服务的
- 静态的私有方法,给静态方法服务的
6.接口的应用
- 当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方法称之为接口多态。
7.适配器设计模式
7.1 设计模式就是解决各种问题的套路
- 当一个接口中抽象方法过多,但是只使用其中几个的时候,就可以使用适配器模式。
-步骤:编写中间类XXXXAdapter,实现对应的接口,对接口中的抽象方法进行空实现,让真正的实现类继承中间类,并重写需要用到的方法。
-
为了避免其他类去创建xxxxAdapter的对象,要用abstract进行修饰。抽象类不能被实例化。