日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

2.用一个简单的pk小游戏深刻理解继承

發(fā)布時(shí)間:2023/12/20 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.用一个简单的pk小游戏深刻理解继承 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們來寫一個(gè)pk類小游戲深刻理解一下繼承:

public class LiuBei {// 屬性String name;int ad;int hp;// PK 攻擊的是一種類型public void ack_1(LvBu lvbu) {lvbu.hp = lvbu.hp - this.ad;System.out.println(this.name + "攻擊了" + lvbu.name);System.out.println(lvbu.name + "失去了" + this.ad + "點(diǎn)HP");System.out.println(lvbu.name + "還剩下" + lvbu.hp + "點(diǎn)HP");} } public class LvBu{String name;int ad;int hp;// PK 攻擊的是一種類型public void ack_1(LiuBei liubei){liubei.hp = liubei.hp - (this.ad*2);System.out.println (this.name + "攻擊了" + liubei.name);System.out.println (liubei.name+"失去了"+(this.ad*2)+"點(diǎn)HP");System.out.println (liubei.name+"還剩下"+liubei.hp+"點(diǎn)HP");}} public class Entrance{public static void main(String[] args){// 先創(chuàng)建雙方對(duì)象LvBu lvbu = new LvBu ();LiuBei liubei = new LiuBei ();// 給對(duì)象的屬性賦值lvbu.name="呂布";lvbu.hp=2000;lvbu.ad=130;liubei.name="劉備";liubei.hp=1800;liubei.ad=150;int count=0;while(lvbu.hp>0&&liubei.hp>0){System.out.println ("-----第"+(++count)+"回合----");// 互相攻擊了一次lvbu.ack_1 (liubei);if(liubei.hp>0){// 被攻擊之后 再判斷一次生命值liubei.ack_1(lvbu);}}} }

? ? ? ? 這幾段代碼出現(xiàn)后,我們可以很明顯的看到,在呂布,劉備這兩個(gè)類中,有代碼冗余。這僅僅是兩個(gè)簡單的人物,我們想一想,假如我們一個(gè)人物需要寫1000行代碼,我們的游戲中有108個(gè)人物,那么總計(jì)就有108000行代碼。?

? ? ? ? 于是我們就要思考一個(gè)問題,能否將這些人物共同的功能寫在一個(gè)類中,讓每個(gè)人物都來“繼承”這個(gè)類中的功能?假如我們每個(gè)人物之間重復(fù)的代碼大約是400行,那么我們每個(gè)人物只需要編寫600行,用剛提到的策略,代碼行數(shù)總共為400+600*108=65200,少了42800行代碼,一下子使代碼行數(shù)少了一大半,并且可以有更好的維護(hù)性。

? ? ? ? 從這個(gè)例子可以看出,人物之間共同的代碼越多,繼承效果越好,實(shí)際上,兩個(gè)任務(wù)的共同的功能很可能超過了一半。上述策略就叫做繼承,繼承是面向?qū)ο蟮闹匾卣?。在java中,被繼承的類叫父類、基類或者超類,與之對(duì)應(yīng)的叫子類或派生類。

? ? ? ?我們就以這個(gè)pk游戲?yàn)槔?#xff0c;他們都有攻擊功能,且屬性均為姓名、攻擊值、生命力,因此將兩個(gè)類共同的部分寫成一個(gè)類——Hero,讓兩個(gè)人物劉備和呂布繼承它即可。

public class Hero {String name;int ad;int hp;public void ack(Hero h){h.hp=h.hp-this.ad;System.out.println(this.name+"攻擊了"+h.name);System.out.println(h.name+"失去了"+this.ad+"點(diǎn)HP");System.out.println(h.name+"還剩下"+h.hp+"點(diǎn)HP");}public void move(){System.out.println(this.name+"每秒移動(dòng)1米");} }

兩個(gè)子類如下:

public class LiuBei extends Hero{//重寫父類的方法@ Override //重寫方法的檢查注解public void move(){System.out.println(this.name+"每秒移動(dòng)2米");} } public class LvBu extends Hero{//重寫父類的方法@ Override //重寫方法的檢查注解public void ack(Hero h){h.hp = h.hp - (this.ad*2);System.out.println (this.name + "攻擊了" + h.name);System.out.println (h.name+"失去了"+(this.ad*2)+"點(diǎn)HP");System.out.println (h.name+"還剩下"+h.hp+"點(diǎn)HP");}} public class Entrance{public static void main(String[] args){// 先創(chuàng)建雙方對(duì)象LvBu lvbu = new LvBu ();LiuBei liubei = new LiuBei ();// 給對(duì)象的屬性賦值liubei.name="呂布";liubei.hp=2000;liubei.ad=130;lvbu.name="劉備";lvbu.hp=1800;lvbu.ad=150;int count=0;while(lvbu.hp>0&&liubei.hp>0){System.out.println ("-----第"+(count++)+"回合----");// 互相攻擊了一次lvbu.ack (liubei);lvbu.move();if(liubei.hp>0){// 被攻擊之后 再判斷一次生命值liubei.ack(lvbu);liubei.move();}}} }

? ? ? ?從表面看,雖然劉備和呂布類都沒有定義成員變量,但他們繼承了父類的成員變量,可以i當(dāng)作自己的變量一樣使用。他們各自也繼承或修改了父類的方法,具體不再闡述。

? ? ? ?為了便于理解,我們?cè)賹懸粋€(gè)書上的例子。以字體對(duì)話框和段落對(duì)話框?yàn)槔?#xff0c;為了簡化起見,假如字體對(duì)話框特征是標(biāo)題、字體名稱,該對(duì)話庫具有顯示的功能;段落對(duì)話框特征是標(biāo)題、高度,該對(duì)話框具有顯示的功能。

? ? ? ?顯然,這兩個(gè)對(duì)話框都有標(biāo)題和顯示功能,因此首先將兩個(gè)類共同的部分寫成一個(gè)類——Dialog。

public class Dialog {protected String title;public void show(){System.out.println(title+"對(duì)話框顯示");} }

? ? ? ?接下來編寫字體對(duì)話框類FontDialog來繼承Dialog類。

public class FontDialog extends Dialog {private String fontName;public FontDialog(String title,String fontName){this.title=title;this.fontName=fontName;} }

? ? ? ? 從表面上看,該類只定義了一個(gè)成員變量fontName,實(shí)際上還從父類繼承了title,可以當(dāng)成自己的變量一樣使用。

? ? ? ? 下面用一個(gè)主函數(shù)進(jìn)行測試:

public class Entrance{public static void main(String[] args) {FontDialog fd=new FontDialog("字體","宋體");fd.show();} }

? ? ? ?顯然,FontDialog從父類那里繼承了show方法,也能當(dāng)成自己方法一樣來使用。

? ? ? ?注:如果一個(gè)成員要被子類繼承之后使用,這個(gè)成員不能是private,因?yàn)樗接械某蓡T不能在類的外部使用,當(dāng)然也不能被子類使用。一般情況下,成員變量定義為protected類型,成員函數(shù)定義為public類型。

總結(jié)

以上是生活随笔為你收集整理的2.用一个简单的pk小游戏深刻理解继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。