接口

24 阅读3分钟

1.为什么要有接口

看下面这个情况,游泳写到父类肯定不合适,但是如果写到每一个子类中格式又会不统一,所以就需要一个游泳的接口。

  • 接口其实就是一种规则。更侧重于行为,学生也可以拥有这个行为(对行为的抽象)

image.png

image.png

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,要把12的抽象方法也重写

5. JDK8和JDK9的接口

5.1 为什么要改变?

  • 比如下面这种情况,一旦接口里面多了个规则,使用接口的类都要修改,要不立马报错,为了解决这个问题(即又想添加新的规则,又想不报错) image.png

5.2 JDK8新特性

  • JDK8允许接口中定义默认方法,需要用default修饰
  • 默认方法不是抽象方法,不强制被重写,但是如果被重写,重写的时候去掉default关键字。
  • public可以省略,default不可以
  • 如果实现了多个接口,存在相同名字的默认方法,子类就必须重写该方法。
  • JDK8也允许在接口中定义静态方法,需要用static修饰。
  • public static void show{}
  • 静态方法只能通过接口名调用

5.3 JDK9新特性

image.png
  • 作用:避免重复代码过多,但是是在接口内部使用的,所以让外界访问没有意义。
  • 普通的私有方法,给默认方法服务的
  • 静态的私有方法,给静态方法服务的
image.png

6.接口的应用

  • 当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方法称之为接口多态。

7.适配器设计模式

7.1 设计模式就是解决各种问题的套路

  • 当一个接口中抽象方法过多,但是只使用其中几个的时候,就可以使用适配器模式。

-步骤:编写中间类XXXXAdapter,实现对应的接口,对接口中的抽象方法进行空实现,让真正的实现类继承中间类,并重写需要用到的方法。

  • 为了避免其他类去创建xxxxAdapter的对象,要用abstract进行修饰。抽象类不能被实例化。