当你想由基类控制接口时,使用继承,当你想自己控制接口时,使用包含。
继承是 is a
包含是 has a
这里的接口是界面的意思,不是单单的java中的interface(当然了,代码大全的代码几乎是c或cpp)
你开发一个类(举例,可能不合实际),一个电脑类,Computer类,你想实现一个功能,于是为电脑类提供一个接口,接口的功能是实现存储,于是一个ISaveAble的接口将要加入这个类,如实ISaveable就被设计为Computer的一个成员,就是包含,以后你可以实现这个接口,设计USB类,Disk类,Float类,分别实现存储功能,这就是[b]你自己控制这个接口[/b]。到底怎么存储,是你自己觉得的。
如果你不想自己控制怎么存储,想让Computer类控制,就在Compoter中添加一个抽象的方法save()方法,然后你继承的Copupter类,然后重写save()方法,这就是[b]由基类控制接口[/b]。
[quote]继承是 is a
包含是 has a [/quote]
由此得出一个原则:尽量采用面向接口编程