接口
1、接口的定义
一是概念性的接口,指系统对外提供的所有服务,类的所有能被外部使用的方法构成了类的接口
二是用interfacef关键字定义的实实在在的接口,也成为接口类型。它用于明确的描述系统对外提供的所有服务,能够更加清晰的把系统的实现细节与接口分离。(今天要分析的是接口类型)
2、接口规则
一、接口中的成员变量默认都是public,static,final类型,必须显示初始化。
二、接口中的成员方法都是public,abstract类型,不能有方法体。
三、接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法。在接口中定义实例变量,非抽象的实例方法以及静态方法都是非法的。
四、接口没有构造方法,不能被实例化。
五、一个接口不能实现另外一个接口,但可以继承多个接口。
六、接口必须通过类来实现它的抽象方法。
七、与子类继承抽象父类相似,当类实现某个接口时,必须实现该接口中的所有方法,否则这个类必须是抽象类。
八、不允许创建接口的实例,但允许定义接口类型的引用变量,该变量引用实现了这个接口的类的实现。
九、一个类只能继承一个直接的父类,但能实现多个接口
3、接口与抽象类的异同点
相同点:
一、都不能被实例化。
二、都包含抽象方法。
三、都是系统的抽象层
不同点:
一、在抽象类中可以提供方法的默认实现,从而避免子类的重复实现,提高代码的可重用性。(这是抽象类的优势所在,容易扩展)而接口中只能包含抽象方法。
二、一个类只能继承一个直接的父类,这个类有可能是抽象类,但一个类能实现多个接口(这是接口的优势所在)
4、与接口相关的设计模式
一、定制服务模式
一种是设计粗粒度的接口,把所有的方法放在一个接口中声明,这个接口臃肿庞大,所有的使用者访问同一个接口。
一种是设计精粒度的接口,对服务精心分类,把相关的一组服务放在一个接口中,通过对接口的继承,可以派生出新的接口,针对使用者的需求提供特定的接口。这种就更加容易维护,向使用者提供的接口是一种承诺,接口一旦提供,便很难撤回。
精粒度的接口可以减少软件开发的成本,例如某个精粒度的接口不得不发生变更,那么也只会影响到一小部分访问接口的使用者,此外,精粒度接口更有利于接口的重用,通过对接口的继承,可以方便生成针对特定使用者的复合接口。
二、适配器模式
松耦合的系统访问是通过接口来交互,当两个系统之间的接口不匹配时,就需要用适配器来把一个系统的接口来转换为适配另一个系统的接口,适配器的作用是进行接口转换。
两种实现方式:
1)继承实现方法
2)组合实现方式
三、默认的适配器模式
用户创建类来实现某个接口时,因为接口中的方法都是抽象的,所有都必须要实现接口中的所有方法。若类中只需要实现其中一个方法,忽略其他事件,此时可以定义一个接口的实现类,对接口的方法提供默认的空实现。该实现类就是默认的适配器。
四、代理模式
五、标识类型模式
六、常量接口模式
import static 语句,简化类的编程,又防止类继承并公开接口中的静态变量。