在 Ihinking in Java 3rd 中,作者的观点也基本上是这样的,摘抄一下大家参考吧:
interface 不简单地只是 abstract class 的更加纯粹的方式,它有更加高级的目的。因为 interface 根本就没有实现,所以,它不需要存储,没有必要去避免许多的 interface 组合在一起。这一点很有用,比如有时候,你想说”An x is an a and a b and a c.“
记住,使用 interface 是最主要的原因是,它可以上溯到多于一个的基类。然后,第二个用 interface 原因与用 abstract class 的相同的,即避免客户程序员创建这个类的实例,因为它只是个接口。这带来一个问题:你什么时候用 interface 或者用 abstract class 呢? interface 给你的好处是 abstract class 的好处加上 interface 特有的好处,因此,只要有可能不用定义成员变量与方法,你应该偏向于 interface 而不是 abstract class。实际上,如果你要创建一个基础类,你的第一选择应该是设计成 interface ,只有当你不得不需要有方法定义或者成员变量时,才转向使用 abstract class,或者直接做成一个实现类。
interface 不简单地只是 abstract class 的更加纯粹的方式,它有更加高级的目的。因为 interface 根本就没有实现,所以,它不需要存储,没有必要去避免许多的 interface 组合在一起。这一点很有用,比如有时候,你想说”An x is an a and a b and a c.“
记住,使用 interface 是最主要的原因是,它可以上溯到多于一个的基类。然后,第二个用 interface 原因与用 abstract class 的相同的,即避免客户程序员创建这个类的实例,因为它只是个接口。这带来一个问题:你什么时候用 interface 或者用 abstract class 呢? interface 给你的好处是 abstract class 的好处加上 interface 特有的好处,因此,只要有可能不用定义成员变量与方法,你应该偏向于 interface 而不是 abstract class。实际上,如果你要创建一个基础类,你的第一选择应该是设计成 interface ,只有当你不得不需要有方法定义或者成员变量时,才转向使用 abstract class,或者直接做成一个实现类。