文件名称:我当老师的360天
文件大小:493KB
文件格式:PDF
更新时间:2010-04-26 15:25:45
Java 兆隆 北大青鸟 老师
预览: <<思考继承>> 继承是可以做到代码重用,并且可以举出三个典型的场景: 场景1:原类已经存在,并能正常运用,新类需要新增一些功能。 比如一个厂家原来是生产U盘的,已经实现了类UDisk,包含readFile和writeFile方法,现在想要生产MP3随身听 (UMP3)。重写一个UMP3类显然很笨,解决方案是让UMP3继承UDisk,这样UMP3可以直接使用父类的readFile和writeFile方法,然后再添加一个playMP3方法就OK了。 场景2:原类已经存在,并能正常运用,但是对其中的一些方法不满意,需要改变。 举游戏CS的例子,里面有一杆枪大家都很熟悉:B46(又名重狙或AWP),此枪威力强大,精确度高,用一个类描述B46的话应该包含以下几个方法:开镜,射击,换子弹,闭镜。但是B46最大的缺点就是换子弹速度太慢,于是又出现了B47(连狙),换子弹速度很快,如何描述类B47呢?只需要让B47继承自B46,然后覆盖父类中的“换子弹”方法就可以了 1。 如果你对CS不熟悉的话,给你另外一个例子:我们已经有了电子表这个类,里面的方法有:供电,报时,调整时间等,现在如果要生产太阳能手表,只要让太阳能手表继承自电子表,然后覆盖其中的“供电”方法就可以了。 场景3:原类已经存在,并能正常运用,但是觉得其中的一些方法不完整,需要扩展。 这里举一个手机来电显示的例子,早期的手机有“来电显示”方法,但只能显示来电号码,后来带电话薄功能的手机出了能显示号码对方的姓名,显然,可以让带电话薄的手机继承老手机。是否要覆盖老手机的“来电显示”方法呢?是的,需要覆盖,但不是一盖了之,老手机的“来电显示”方法还可以用,我们只是要扩展其中的功能,那么可以在新手机的“来电显示”方法中先调用父类的该方法,实现显示对方的号码,自己再实现显示姓名的功能。现在的彩屏的手机出了能现实号码、姓名,还能现实来电者的照片,可以让彩屏手机继承带电话薄的手机,然后还是覆盖“来电显示”方法,实现时先调用父类的方法,再实现自己特有的功能。 这三种场景演示了代码重用,但是是否优雅呢?