辨异 —— Java 中的抽象类和接口

时间:2022-12-14 14:26:43

接口优于抽象类。—— 《Effective Java》(Item 18)

0. 语法区别

  • 抽象类允许给出某些方法的实现,接口不允许;
  • 为了实现由抽象类定义的类型(type),类必须成为抽象类的子类(extends,表示的含义是 is a
    • Java 仅允许单继承,抽象类作为类型定义局限性很大。
    • 而任何一个类,只要它定义了所有必要的方法,并且遵守通用约定,它就被允许实现一个接口,而与该类所处的层次(class hierarchy)无关。

1. 多重继承

  • 接口不仅仅是一种更纯粹形式的抽象类,设计接口的意义远不止于此。接口是根本没有任何具体实现的,在存储意义上,没有任何与接口相关的存储,也就无法阻止多个接口的组合。
    • 借用 C++ 中的概念,组合多个类的接口的行为就加多重继承;