自-用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)
7页1、【文章标题】用面向对象的思想探讨游戏“魔兽争霸”()继承和多态的应用(修改版)【文章作者】曾健生【作者邮箱】【作者QQ】19067898【作者博客】【编程环境】K1.60_01【作者声明】欢迎转载文章,但转载请保留文章的完整性以及注明文章的出处。*在上一篇文章用面向对象的思想探讨游戏“魔兽争霸”(1)(详见本人博客, ),文中用面向对象的一个特性封装,初步实现了代码,正如在上文末尾讨论的一样,代码有相当多可改进的地方,本文将使用面向对象中另外两个特性继承和多态改进代码。仔细比较上篇文章中的弓箭手类Bwer和食尸鬼类Ght,可发现除了构造函数,移动的方法moeT,受到攻击时的方法getun外,其他的方法都是一样的。这时可把两个类中的相同的部分提炼出来写成一个父类Figer,把弓箭手类B和食尸鬼类Ghos继承于父类igter,根据子类和父类的关系:子类自动继承父类公有的属性和方法,并且子类可以在父类的基础上增加方法、覆盖方法,以增强、改进父类。所以就能很方便地实现代码的复用。另外我们观察食尸鬼类Ghost受到攻击时的方法getunt的定义:public vod gHunt( Bwr b )
2、函数的传入参数为弓箭手类的对象,这样就会产生一个问题,如果食尸鬼类Gos不是被弓箭手攻击而是被女猎手攻击呢?难道要为每种情况单独写一个方法处理吗?现在可以利用面向对象中的多态的特性,用一个父类的引用指向一个子类的对象,就可以用父类调用子类的方法,这样做最大的好处就是遮避了不同的子类类型,只要子类是继承父类,调用各个子类的方法都可以用父类的方法调用代替。我们可以仔细比较上文用面向对象的思想探讨游戏“魔兽争霸”(1)中的弓箭手类和食尸鬼类Ghost可发现,除了移动方法move和受到攻击的方法etHunt外,其他方法的实现都是相同的。我们可把相同的属性和方法设计成一个抽象类Fighter,代码如下:/战士类,所有的士兵都继承于这个类bsra cass ighterprivate int posX; /战士在地图上X的坐标prvae int posY; /战士在地图上Y的坐标rivate int d;/战士在地图上Y的坐标rivat inlieNum; /战士的生命值prvat inattcu; /战士的攻击力riaein unteNu; /战士的防御力pubi Fihter(nt posX,
3、 it posY, it id, int lifeNu, int attackNm,int untnNum) tis.osX poX;hspsY =posY;ti.id =i;this.liNu =lifeum;tsattacku = atckNum;thsuenu = nteNm;*一般来说,生命值,攻击力,防御力等都属于对象的核心数据,对它们的访问必须要严格控制,所以设计出geLfeum(),geAackNm(),gtUtNm()这三个方法/获取战士的剩余生命值ublic igetLfNum()eurn lifeNum;/设置战士的生命值pubic voi setLieNum( intm)leNm=num;/获取战士的攻击力pli intgtAttacNu()retr atackN;/获取战士的防御力puliit geUntnNu()reurn uteNum;/获取战士的号blc intged()retrn id;/获取战士的X坐标pubi int etPosX() rtr psX;ic void tPos(inposX) this.pos osX;获取战士的Y坐标lic inge
《自-用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)》由会员熠***分享,可在线阅读,更多相关《自-用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)》请在金锄头文库上搜索。
2023-04-03 1页
2023-04-03 20页
2023-04-03 1页
2022-09-02 111页
2022-07-27 30页
2022-04-28 3页
2022-01-26 9页
2022-01-26 27页
2021-12-15 9页
2021-12-15 6页