Java 接口
接口是特殊的抽象类
- 定义:
范围修饰符 interface 接口名{} - 说明:接口中没有构造方法,只能定义公开静态常量、公开抽象方法。
与抽象类对比
| 相同点 | 不同点 |
|---|---|
| 可编译成字节码文件 | 所有属性都是公开静态常量,隐式使用public static final修饰 |
| 不能创建对象 | 所有方法都是公开抽象方法,隐式使用public abstract修饰 |
| 可以作为引用类型 | 没有构造方法、动态代码块、静态代码块 |
| 具备Object类中所定义的方法 |
微观概念
接口是一种能力和约定
接口的定义:代表了某种能力。
方法的定义:能力的具体要求。
Java 为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力。
- 接口支持多实现,可为类扩充多种能力
接口规范
- 任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类。
- 实现接口中的抽象方法时,访问修饰符必须是
public。
接口引用
- 同父类一样,接口也可声明为引用,并指向实现类对象。
- 注意
- 仅可调用接口中所声明的方法,不可调用实现类中独有的方法
- 可强转回现实类本身类型,进行独有方法调用
接口多态
如何理解接口的多态,可结合现实生活。比如狗类继承了动物类并实现了跑接口和游泳接口,当创建狗对象时,引用类型为动物类,就是将狗看作为动物、引用类型为跑,就是将狗看作会跑的东西、引用类型为游泳,就是将狗看作会游泳的东西看。只是视角不同,这样就很好理解了。其中,不用引用所能看到的对下个范围不同,只能调用自身类型中所声明的部分。
常见接口
- 类与类
- 单继承(extends)
- 类与接口
- 多实现(implements 接口1,接口2,接口3...)
- 接口与接口
- 多继承(extends 接口1,接口2,接口3...)
接口种类
-
常量接口:将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码可读性。
-
标记接口:接口没有任何成员,仅仅是一个标记。Serializable、Cloneable。
宏观概念
接口是一种标准
以电脑为例,电脑上有一些USB接口,而电脑是这些接口的使用者。鼠标、键盘、U盘是USB接口的实现者,这些外设通过USB接口和电脑连接。
接口回调
- 先有接口的使用者,后有接口的实现者。
- 制定接口标准
- 创建接口使用者
- 创建接口实现者
- 通过接口使用者去调用接口的实现者
接口的好处
- 降低程序的耦合度
- 更自然的使用多态
- 设计与实现完全分离
- 更容易搭建程序框架
- 更容易更换具体实现
面向对象设计原则
开口里合最单依(七个法则),其中最是指迪米塔法则(称为:最少知识原则)
- 开闭原则(Open Close Principle OCP)
- 对外扩展开放,对修改关闭
- 单一职责原则(Single Responsibility Principle SRP)
- 每个类都应该实现单一职责,如若不然,就应该将类拆分
- 里氏替换原则(Liskov Substitution Principle LSP)
- 任何基类出现的地方,子类一定可以出现
- 子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随意破坏它
- 依赖倒置原则(Dependency Inversion Principle DIP)
- 面向接口编程,依赖于抽象而不依赖于具体。
- 接口隔离原则(Interface Segregation Principle ISP)
- 每个接口不存在子类用不到却必然实现的方法,否则,将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口的方法集成到一个接口中)要好
- 迪米特法则(Demeter Principle DP)
- 一个对象应当对其它对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时。还有一个类也可能发生变化。
- 合成复用原则(Composite Reuse Principle CRP)
- 尽量首先使用组合、聚合的方式,而不使用继承