5. 接口
一个接口是一系列方法和常量集合的表现形式。当一个类实现了一个接口,就意味这个类实现了此接口声名的所有方法。
在英语中,一个接口是不相关的设备和系统相互作用的媒介。这个概念对于java同样适用,其实协议也可以看作是一种接口。
例如,在一个商店的目录管理程序中,对于自行车这个类,至少要有两个属性:id号和价格,但这两个属性如果放在自行车这个类中,目录管理程序如何访问呢?有两个方法,一是目录管理程序继承自行车这个类,这当然是离谱的;二是自行车提供get和set方法,这是解决方法,但不是很好。为什么呢?id号和价格基本是每件商品的属性,别的商品(对象)当然也要提供,那么对与目录管理程序来说就不好处理了,它必须针对每个类来处理,而且它也无法得知要处理的类是否提供了这两个get和set方法。如果把id号和价格放入接口中,则可以很好的解决这个问题,不妨称这个接口为目录接口,这样目录管理程序现在只需要处理一种对象:目录接口,没有了处理多个对象的麻烦,而且实现此接口的对象必然实现了set和get方法。从这里也可以看出,构建类时主要考虑的是类本身的属性和方法,而构建接口时则主要考虑的是如何和其他对象的交互。好像有点辨正法的意思。
接口在以下地方是很有用的:
(1) 在没有联系的类中间扑获相似点,但是又不想它们之间产生联系时。
(Capturing similarities among unrelated classes without
artificially forcing a class relationship)
(2) 申明的方法是一个或者多个类期望实现的方法。(Declaring methods
that one or more classes are expected to implement)
(3) 想暴露方法(interface)却不想暴露这个方法所属的类时(Revealing an
object's programming interface without revealing its class)。