Java 8 改进的接口

接口是一种抽象的更彻底的抽象类,接口里的所有方法都是抽象方法。
本文包含如下:

  1. 接口的概念
  2. Java 8 中接口的定义
  3. 接口的继承
  4. 使用接口
  5. 接口和抽象类
  6. 面向接口编程

1. 接口的概念

Java 8 改进的接口
可见,接口是从多个相似类中抽象出来的规范,不停任何实现。接口体现的是规范和实现分离的设计哲学。
接口的好处:
Java 8 改进的接口
软件系统的各模块也应该采用这种面向接口的耦合,降低各模块之间的耦合,为系统提供更好的可扩展性和维护性。
接口里通常是定义一组公用方法。

2. Java 8中接口的定义

定义接口形式如下:
Java 8 改进的接口
Java 8 改进的接口
在上面的语法中:
Java 8 改进的接口
接口里所含的内容说明:
Java 8 改进的接口
接口的访问控制修饰符说明:
Java 8 改进的接口
对于接口定义的静态常量;
Java 8 改进的接口
Java 8 改进的接口
接口的定义的方法:
Java 8 改进的接口
接口定义的内部类、内部接口、内部枚举类:
Java 8 改进的接口
下面定义一个接口:
Java 8 改进的接口
Java 8 改进的接口
接口里的成员变量默认是使用 public static final 修饰的,因此即使另一个类处于不同包下,也可以通过接口来访问接口里的成员变量。如下面程序:
Java 8 改进的接口
在上面程序中:
Java 8 改进的接口
Java 8 改进的接口

3. 接口的继承

接口的继承支持多继承,即一个接口可以有多个直接父接口。
子接口继承父接口,将会获得父接口里定义的所有抽象方法、常量。
Java 8 改进的接口

4,使用接口

接口的用途:
Java 8 改进的接口
Java 8 改进的接口
实现接口和继承父类相似,一样可以获得所实现接口里定义的常量(成员变量)、方法(包括抽象方法和默认方法)
Java 8 改进的接口
Java 8 改进的接口
Java 8 改进的接口
以下展示一个实现接口的类:
Java 8 改进的接口
在上面的程序中:
Printer 类实现了 Output 接口和 Product 接口,因此 Printer 对象既可以赋给 Output 变量,也可以赋给 Product 变量。仿佛 Printer 类既是 Output 类的子类,也是 Product 类的子类,也就是Java 提供的模拟多继承
Java 8 改进的接口
实现接口方法时,必须使用 public 修饰符
Java 8 改进的接口
Java 8 改进的接口

5. 接口和抽象类

接口和抽象类都具有如下特征:
Java 8 改进的接口
接口和抽象类的差别:
在接口类中:
Java 8 改进的接口
而对于抽象类:
Java 8 改进的接口
除此之外,这两者在用法上存在如下区别:
Java 8 改进的接口

6. 面向接口编程

面向接口可以降低耦合。以下介绍两个应用场景:

1.简单工厂模式
Java 8 改进的接口
Java 8 改进的接口
上面的 Computer 类已经完全与 Printer 类分类,只是与 Output 接口耦合。Computer 不再负责创建 Output 对象,系统提供一个Output 工厂来负责生成 Output 对象,这个 OutputFactory 工厂代码如下:
Java 8 改进的接口
Java 8 改进的接口
下面是BetterPrinter 实现类的代码,BetterPrinter 只是对原有的Printer 进行简单修改,以模拟系统重构后的改进。
Java 8 改进的接口
上面的 BetterPrinter 类也出现了 Output 接口,因此也可被当成 Output 对象使用,于是只要把 OutputFactory 工厂类的 getOutput() 方法中粗体字代码改为如下代码:
return new BetterPrinter();
再次运行前面的 OutputFactory.java 程序,发现系统运行时已经改成 BetterPrinter 对象,而不是原来的 Printer 对象。
Java 8 改进的接口
对于设计模式的理解:
Java 8 改进的接口

2. 命令模式

考虑这种场景:某个方法需要完成一种行为,但这个行为的具体实现无法确定,必须等到执行该方法时才可以确定。
这个方法不仅需要普通数据可以发生变化,执行方法体可能也需要发生变化,难道把“处理行为”作为参数传进来?
Java 8 改进的接口
Java 8 改进的接口
上面的 Command 接口里定义了一个 process() 方法,这个方法用于封装“处理行为”;但是不确定其处理行为。
Java 8 改进的接口
下面程序示范了对数组的两种方式:
Java 8 改进的接口
Java 8 改进的接口
运行上面程序,最后输出结果如下图所示:
Java 8 改进的接口
Java 8 改进的接口