Java 接口

193 阅读4分钟

Java 接口

接口是特殊的抽象类

  • 定义:范围修饰符 interface 接口名{}
  • 说明:接口中没有构造方法,只能定义公开静态常量、公开抽象方法。

与抽象类对比

相同点不同点
可编译成字节码文件所有属性都是公开静态常量,隐式使用public static final修饰
不能创建对象所有方法都是公开抽象方法,隐式使用public abstract修饰
可以作为引用类型没有构造方法、动态代码块、静态代码块
具备Object类中所定义的方法

微观概念

接口是一种能力和约定

接口的定义:代表了某种能力

方法的定义:能力的具体要求

Java 为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力。

  • 接口支持多实现,可为类扩充多种能力

接口规范

  • 任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类。
  • 实现接口中的抽象方法时,访问修饰符必须是public

接口引用

  • 同父类一样,接口也可声明为引用,并指向实现类对象。
  • 注意
    • 仅可调用接口中所声明的方法,不可调用实现类中独有的方法
    • 可强转回现实类本身类型,进行独有方法调用

接口多态

如何理解接口的多态,可结合现实生活。比如狗类继承了动物类并实现了接口和游泳接口,当创建对象时,引用类型为动物类,就是将狗看作为动物、引用类型为,就是将狗看作会跑的东西、引用类型为游泳,就是将狗看作会游泳的东西看。只是视角不同,这样就很好理解了。其中,不用引用所能看到的对下个范围不同,只能调用自身类型中所声明的部分。

常见接口

  • 类与类
    • 单继承(extends)
  • 类与接口
    • 多实现(implements 接口1,接口2,接口3...)
  • 接口与接口
    • 多继承(extends 接口1,接口2,接口3...)

接口种类

  • 常量接口:将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码可读性。

  • 标记接口:接口没有任何成员,仅仅是一个标记。SerializableCloneable

宏观概念

接口是一种标准

以电脑为例,电脑上有一些USB接口,而电脑是这些接口的使用者。鼠标、键盘、U盘是USB接口的实现者,这些外设通过USB接口和电脑连接。

接口回调

  • 先有接口的使用者,后有接口的实现者。
  1. 制定接口标准
  2. 创建接口使用者
  3. 创建接口实现者
  4. 通过接口使用者去调用接口的实现者

接口的好处

  • 降低程序的耦合度
  • 更自然的使用多态
  • 设计与实现完全分离
  • 更容易搭建程序框架
  • 更容易更换具体实现

image.png

面向对象设计原则

开口里合最单依(七个法则),其中最是指迪米塔法则(称为:最少知识原则)

  • 开闭原则(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)
    • 尽量首先使用组合、聚合的方式,而不使用继承