欢迎来到天天文库
浏览记录
ID:39765020
大小:821.01 KB
页数:44页
时间:2019-07-11
《面向对象程序设计高级》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章面向对象程序设计高级郭建宏椅子大戰從前,有一間軟件小鋪,裡面有兩個程序員被指派去設計一個程序。壞心的老闆娘兼項目經理要求兩個人比賽,贏的人可以坐上象徵身份地位的AeronTM寶椅。程序開發高手阿珠和面向對象的信徒阿花兩個人都相信自己贏的可能性很大。需求在图形接口中画出四方形(squre),圆形(circle)和三角形(triangle),图形需要顺时针绕中心旋转,同时输出AIF音效文件。阿珠是怎樣做的?和以往一样,阿珠准备好开始设计重要的程序。没几下就写出了rotate和playSound方法。rotate(){//绕中心旋转360度。}playSound(){//
2、播放aif文件。}阿花是怎樣做的?阿花分别为三个形状各写出一个类。新的需求(一)前面的形状需要加上阿米巴原虫(Amoeba)形状。用户点选时也是旋转并播放.hif的声音文件。阿珠该怎样做?原来的rotate程序还可以用。但是playSound就得要修改。虽然修改的幅度不大,但是阿珠实在不想去碰已经测试过的程序代码。他应该很清楚,不管项目经理怎么保证,需求就是会不停的改。playSound(shapeNum){//参数用来标识传入的是否是amoeba图形//如果不是阿米巴形状,则播放.aif文件。//如果是则播放.hif文件}阿花該怎樣做?阿花则写出一个新的类。面向对象让他
3、最喜欢的其中一点就是有时不需改动已经测试好的程序就可以达成新的目标。面向对象的适应性和可扩展性让他面对修改时不会觉得太痛苦。新的需求(二)阿米巴虫在旋转的时候需要以给定的作为原点旋转。阿珠該怎樣做?阿珠最好还是帮rotate程序加上轴心点的参数。这样就有一堆程序要改。本来已经测试好的东西全部又得重来一遍。rotate(shapeNum,xPt,yPt){//如果不是阿米巴,则绕中心旋转。//否则以xPt和yPt作为旋转中心旋转。}阿花该怎样做阿花修改rotate这个方法,但不是每个都要修改,只修改Amoeba这个类而已。其他已经测试、编译过的部分完全没有必要修改。该类需要
4、的修改就是加上旋转轴心点的属性。问题的解决从上面的分析可以看出,阿花的设计是非常好的。但是还有一个问题,在每个类中rotate和playSound有很多都是重复的。这样做太没有效率了。该怎样解决这样的问题呢?答案就是应用“继承”来解决。怎樣繼承继承概述多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。通过extends关键字让类与类之间产生继承关系。classSubDemoextendsDemo{}子类继承父类后,都继承了父类的那些哪些成员呢?子类继承了
5、父类的属性,包括私有属性。子类继承了除构造方法外的其他所有方法。问题:为什么子類對象在實例化之前必須首先調用父類中的構造方法之後再調用子類自己的構造方法?继承的特点Java只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。classSubDemoextendsDemo{}//okclassSubDemoextendsDemo1,Demo2...//errorJava支持多层继承(继承体系)classA{}classBextendsA{}classCextendsB{}子类对象实例化子類對象在實例化之前必須首先調用父類中的構造方法之後再調用子類自己的構造方
6、法。定义继承需要注意不要仅为了获取其他类中的某个功能而去继承。类与类之间要有所属(“isa”)的关系,xx1是xx2的一种。阿米巴的rotate该怎么办?阿米巴形状会需要完全不同的rotate和playSound程序,如果都继承Shape,那旋转的功能就都一样了。解决方法:Amoeba这个类可以覆盖(override)Shape的方法。(多态)阿米巴的rotate该怎么办?方法覆写(Override)子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。父类中的私有方法不可以被覆盖。在子类覆盖方法中,继续使用被覆盖的方法可以通过“super.函数名”获取(
7、super关键字部分介绍)。覆盖注意事项覆盖时,子类方法权限一定要大于父类方法权限。private
此文档下载收益归作者所有