- 博客(0)
- 资源 (11)
- 收藏
- 关注
我当老师的360天
预览:
<>
继承是可以做到代码重用,并且可以举出三个典型的场景:
场景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:原类已经存在,并能正常运用,但是觉得其中的一些方法不完整,需要扩展。
这里举一个手机来电显示的例子,早期的手机有“来电显示”方法,但只能显示来电号码,后来带电话薄功能的手机出了能显示号码对方的姓名,显然,可以让带电话薄的手机继承老手机。是否要覆盖老手机的“来电显示”方法呢?是的,需要覆盖,但不是一盖了之,老手机的“来电显示”方法还可以用,我们只是要扩展其中的功能,那么可以在新手机的“来电显示”方法中先调用父类的该方法,实现显示对方的号码,自己再实现显示姓名的功能。现在的彩屏的手机出了能现实号码、姓名,还能现实来电者的照片,可以让彩屏手机继承带电话薄的手机,然后还是覆盖“来电显示”方法,实现时先调用父类的方法,再实现自己特有的功能。
这三种场景演示了代码重用,但是是否优雅呢?
2007-04-06
J2EE中常见术语解释
J2EE中常见术语解释
预览:<<RMI-IIOP>>
Remote Method Invocation over the Internet-ORB Protocol(基于互联网的对象请求代理协议实现的远程方法调用) J2EE和EJB事实上的网络通信标准,基于RMI,同时又兼容CORBA,使得EJB组件可以被Java之外的客户端调用。位于javax.rmi包中。 话题1:为何J2EE要兼容CORBA
CORBA是OMG(对象管理组织)推出的成功的分布式对象通信标准,为了占领企业级市场,EJB必须考虑和遗留系统的集成,以及为异构系统提供服务,这都需要采用更加通用
的CORBA,而不是只能在Java平台下使用的RMI。 话题2:引入CORBA之后面临的问题
1, 分布式垃圾收集:并非所有支持CORBA的语言都有垃圾收集机制。
2, 窄化(Narrowing):当通过RMI或RMI-IIOP获取一远程对象时,实际上获取的是其存根(Stub)。在RMI中,会自动下载此存根;而CORBA没有这个机制,必须用额外的方法解决(其实是通过javax.rmi.PortableRemoteObject的narrow方法解决的)。
2007-04-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅