<? super A>下限通配符,A及其父类
<? extends A>上限通配符,A及其子类
List<? extends Number> list,意味着list可以匹配多种类型中的一种,但并不意味着同一个list可以存放所有这些的类型,无限定通配符和下限通配符同理
委托/委派:一个对象请求另一个对象的功能
委派是复用的一种常见形式
很多设计模式将继承和委托结合使用
如果子类只需要复用父类中的一小部分方法,可以不需要使用继承,而是通过委派机制来实现
一个类不需要继承另一个类的全部方法,通过委托机制调用部分方法,从而避免继承大量的无用方法
组合是委派的一种形式
委托发生在object层面,而继承发生在class层面
通过inheritance实现对某些通用的行为的复用
缺点:需要针对“飞法”设计复杂的继承关系树;不能同时支持针对“叫法”的继承;动物行为发生变化时,继承树要随之变化
使用接口定义系统必须对外展示的不同侧面的行为
接口之间通过extends实现行为的扩展(接口组合)
类implements组合接口
从而规避了复杂的继承关系
之所以library和framework被称为系统层面的复用是因为他们不仅定义了1个可复用的接口/类,而是将某个完整系统中的所有可复用的接口/类都实现出来
并且定义了这些类之间的交互关系、调用关系,从而形成了系统整体的“架构”
API是程序员最最重要的资产和“荣耀”,吸引外部用户,提高声誉
建议:始终以开发API的标准面对任何开发任务,面向“复用”编程而不是面向“应用”编程
难度:要有足够良好的设计,一旦发布就无法再自由改变