担任:从头利用接口
就其自己来说,工具的观念可为我们带来极大的便利。它在观念上答允我们将各式百般数据和成果封装到一起。这样便可得当表达“问题空间”的观念,不消决心遵照基本呆板的表达方法。在措施设计语言中,这些观念则反应为详细的数据范例(利用class要害字)。
我们费精心思做出一种数据范例后,如果不得不又新建一种范例,令其实现大抵沟通的成果,那会是一件很是令人悲观的工作。但若能操作现成的数据范例,对其举办“克隆”,再按照环境举办添加和修改,环境就显得抱负多了。“担任”正是针对这个方针而设计的。但担任并不完全等价于克隆。在担任进程中,若原始类(正式名称叫作基本类、超类或父类)产生了变革,修悔改的“克隆”类(正式名称叫作担任类可能子类)也会反应出这种变革。在Java语言中,担任是通过extends要害字实现的
利用担任时,相当于建设了一个新类。这个新类不只包括了现有范例的所有成员(尽量private成员被埋没起来,且不能会见),但更重要的是,它复制了基本类的接口。也就是说,可向基本类的工具发送的所有动静亦可原样发给衍生类的工具。按照可以发送的动静,我们能知道类的范例。这意味着衍生类具有与基本类沟通的范例!为真正领略面向工具措施设计的寄义,首先必需认识到这种范例的等价干系。
由于基本类和衍生类具有沟通的接口,所以谁人接口必需举办非凡的设计。也就是说,工具吸收到一条特定的动静后,必需有一个“要领”可以或许执行。若只是简朴地担任一个类,并不做其他任何工作,来自基本类接口的要领就会直接照搬到衍生类。这意味着衍生类的工具不只有沟通的范例,也有同样的行为,这一效果凡是是我们不肯见到的。
有两种做法可将新得的衍生类与本来的基本类区分隔。第一种做法十分简朴:为衍生类添加新函数(成果)。这些新函数并非基本类接口的一部门。举办这种处理惩罚时,一般都是意识到基本类不能满意我们的要求,所以需要添加更多的函数。这是一种最简朴、最根基的担任用法,大大都时候都可完美地办理我们的问题。然而,事先照旧要仔细观测本身的基本类是否真的需要这些特另外函数。