日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

来谈谈JAVA面向对象 - 鲁班即将五杀,大乔送他回家??

發(fā)布時(shí)間:2023/12/9 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 来谈谈JAVA面向对象 - 鲁班即将五杀,大乔送他回家?? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

開發(fā)IDE為Eclipse或者M(jìn)yEclipse。

首先,如果我們使用面向過程的思維來解決這個(gè)問題,就是第一步做什么,第二步做什么?

魯班即將五殺,大喬送他回家

這個(gè)現(xiàn)象可以簡(jiǎn)單地拆分為兩步,代碼大概是這個(gè)樣子的:

public class Test01 { public static void main(String[] args) { System.out.println("魯班即將五殺"); System.out.println("大喬送他回家"); } }

面向過程的思維大概就是這樣。

如果我們用面向?qū)ο蟮乃季S來看待這個(gè)問題,首先,得抽象出有哪幾個(gè)對(duì)象。

魯班類:

/*** 魯班類* @author Administrator**/ public class Luban { private String name = "魯班"; //英雄的名字 private int killCount = 0; //擊殺個(gè)數(shù) }

因?yàn)轸敯鄷?huì)有一個(gè)從?first blood?到?penta kill?的過程 , 在這個(gè)過程中,需要對(duì)killCount 這個(gè)變量一步步遞增,所以,我們給它再加一個(gè)kill方法。

public void kill(){ killCount++; switch (killCount) { case 1: System.out.println("First Blood!"); break; case 2: System.out.println("Double Kill!"); break; case 3: System.out.println("Triple kill!"); break; case 4: System.out.println("Quadra kill!"); break; case 5: System.out.println("Penta kill!"); break; default: break; } }

這個(gè)時(shí)候,我們發(fā)現(xiàn),訪問不了私有變量。我們需要給name和killCount添加對(duì)應(yīng)的get,set方法:

Alt + S --> Generator Getters and Setters -->

這樣就自動(dòng)生成了!

至此,魯班類告一段落,接下來編寫大喬類:

/*** 大喬類* @author Administrator**/ public class Daqiao { private String name = "大喬"; /** * 放大招的方法 */ public void DaZhao(Luban luban){ } }

大招方法需要把魯班給裝進(jìn)去,大家思考如何實(shí)現(xiàn)送魯班回家的過程?

這邊我提供一個(gè)思路,給魯班添加一個(gè)私有的布爾屬性 isAtHome,默認(rèn)是false。當(dāng)魯班被傳遞進(jìn)大喬的大招方法里之后,就改為true。

private boolean isAtHome = false; //是否回泉水?

別忘了生成 get set 方法。

于是乎,大招方法就變成了這樣:

/*** 放大招的方法*/ public void DaZhao(Luban luban){ luban.setAtHome(true); }

現(xiàn)在大家再想一個(gè)問題,當(dāng)魯班回泉水了,還能不能繼續(xù)調(diào)用 kill 方法?

肯定是不能了,修改后的 kill 方法,在killCount++之前就應(yīng)該return掉:

public void kill(){ if(this.isAtHome){ setName("魯班七號(hào)"); System.out.println(name + ":我是誰,在干什么??"); return; } killCount++; switch (killCount) { case 1: System.out.println("First Blood!"); break; case 2: System.out.println("Double Kill!"); break; case 3: System.out.println("Triple kill!"); break; case 4: System.out.println("Quadra kill!"); break; case 5: System.out.println("Penta kill!"); break; default: break; } }

測(cè)試:

import bean.Daqiao; import bean.Luban; public class Test02 { public static void main(String[] args) { Luban luban = new Luban(); luban.kill(); luban.kill(); luban.kill(); luban.kill(); Daqiao dq = new Daqiao(); dq.DaZhao(luban); luban.kill(); } }

以上就是我們面向?qū)ο蟮囊话闼悸?#xff0c;先抽象出有幾個(gè)類,然后設(shè)計(jì)每個(gè)類中有哪些方法?

面向?qū)ο笥腥筇匦?#xff0c;分別為繼承,封裝和多態(tài)。

繼承

還是這個(gè)例子,思考:魯班和大喬都屬于王者峽谷里面的英雄。他們有很多共同的特性。我們可以抽象出一個(gè)通用的英雄類,Hero類 。

package bean;/** * 英雄類 * @author Administrator * */ public class Hero { protected String name; protected int killCount = 0; protected boolean isAtHome = false; public void kill(){ } public void DaZhao(){ } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getKillCount() { return killCount; } public void setKillCount(int killCount) { this.killCount = killCount; } public boolean isAtHome() { return isAtHome; } public void setAtHome(boolean isAtHome) { this.isAtHome = isAtHome; } }

然后讓魯班和大喬都繼承這個(gè)類。

對(duì)魯班而言,繼承了Hero類以后,只需要重寫kill即可,省去了很多代碼:

package bean;/** * 魯班類 * @author Administrator * */ public class Luban extends Hero{ public void kill(){ if(this.isAtHome){ System.out.println(name + ":我是誰,在干什么??"); return; } killCount++; switch (killCount) { case 1: System.out.println("First Blood!"); break; case 2: System.out.println("Double Kill!"); break; case 3: System.out.println("Triple kill!"); break; case 4: System.out.println("Quadra kill!"); break; case 5: System.out.println("Penta kill!"); break; default: break; } } }

大喬類也是同樣的道理:

package bean;/** * 大喬類 * @author Administrator * */ public class Daqiao extends Hero{ /** * 放大招的方法 */ public void DaZhao(Luban luban){ luban.setAtHome(true); } }

這個(gè)時(shí)候,我們可以看到,繼承的一個(gè)好處就是可以省去很多重復(fù)的代碼,提高了代碼的復(fù)用率。

封裝

現(xiàn)在我們考慮如何讓java程序來播放一個(gè)音樂?

經(jīng)過改造后的魯班 kill 方法:

public void kill(){ if(this.isAtHome){ setName("魯班七號(hào)"); System.out.println(name + ":我是誰,在干什么??"); return; } killCount++; switch (killCount) { case 1: //解析音樂地址 try{ URL codebase = new URL("file:/E:/workspace/demos/1.wav"); AudioClip a = Applet.newAudioClip(codebase); a.play(); //播放音樂 Thread.sleep(2000); }catch(Exception e){ System.out.println("錯(cuò)就錯(cuò)唄,無所謂!"); } System.out.println("First Blood!"); break; case 2: //解析音樂地址 try{ URL codebase = new URL("file:/E:/workspace/demos/2.wav"); AudioClip a = Applet.newAudioClip(codebase); a.play(); //播放音樂 Thread.sleep(2000); }catch(Exception e){ System.out.println("錯(cuò)就錯(cuò)唄,無所謂!"); } System.out.println("Double Kill!"); break; case 3: //解析音樂地址 try{ URL codebase = new URL("file:/E:/workspace/demos/3.wav"); AudioClip a = Applet.newAudioClip(codebase); a.play(); //播放音樂 Thread.sleep(2000); }catch(Exception e){ System.out.println("錯(cuò)就錯(cuò)唄,無所謂!"); } System

轉(zhuǎn)載于:https://www.cnblogs.com/banxian-yi/p/10579444.html

總結(jié)

以上是生活随笔為你收集整理的来谈谈JAVA面向对象 - 鲁班即将五杀,大乔送他回家??的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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