來談談JAVA面向對象 - 魯班即將五殺,大喬送他回家??

開發IDE為Eclipse或者MyEclipse。

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

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

這個現象可以簡單地拆分為兩步,代碼大概是這個樣子的:

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

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

如果我們用面向對象的思維來看待這個問題,首先,得抽象出有哪幾個對象。

魯班類:

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

因為魯班會有一個從?first blood?到?penta kill?的過程 , 在這個過程中,需要對killCount 這個變量一步步遞增,所以,我們給它再加一個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; } }

這個時候,我們發現,訪問不了私有變量。我們需要給name和killCount添加對應的get,set方法:

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

這樣就自動生成了!

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

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

大招方法需要把魯班給裝進去,大家思考如何實現送魯班回家的過程?

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

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

別忘了生成 get set 方法。

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

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

現在大家再想一個問題,當魯班回泉水了,還能不能繼續調用 kill 方法?

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

public void kill(){ if(this.isAtHome){ setName("魯班七號"); 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; } }

測試:

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(); } }

以上就是我們面向對象的一般思路,先抽象出有幾個類,然后設計每個類中有哪些方法?

面向對象有三大特性,分別為繼承,封裝和多態。

繼承

還是這個例子,思考:魯班和大喬都屬于王者峽谷里面的英雄。他們有很多共同的特性。我們可以抽象出一個通用的英雄類,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; } }

然后讓魯班和大喬都繼承這個類。

對魯班而言,繼承了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); } }

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

封裝

現在我們考慮如何讓java程序來播放一個音樂?

經過改造后的魯班 kill 方法:

public void kill(){ if(this.isAtHome){ setName("魯班七號"); 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("錯就錯唄,無所謂!"); } 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("錯就錯唄,無所謂!"); } 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("錯就錯唄,無所謂!"); } System

轉載于:https://www.cnblogs.com/banxian-yi/p/10579444.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278122.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue 教程第一篇——基礎概念

認識 Vue 關于 Vue 的描述有不少,不外乎都會拿來與 Angular 和 React 對比,同樣頭頂 MVVM 雙向數據驅動設計模式光環的 Angular 自然被對比的最多,但到目前為止,Angular 在熱度上已明顯不及 Vue,性能已成為最大的詬病。…

Microsoft Teams的Outgoing Webhook開發入門

Microsoft Teams的應用程序有幾種形式: TabsBotsConnectorsMessaging extensionsActivity feed integrationsOutgoing web hooks 這篇我們主要介紹如何使用 ASP.NET Core來開發最簡單的Outgoing web hook。 什么是outgoing webhook Outgoing webhooks allow you t…

0418 jQuery筆記(添加事件、each、prop、$(this))

1.添加點擊事件、each、prop、$(this) 1 //全選框的被動操作2 //定義一個標志保存最終狀態3 var flag false;4 //為每一個選擇框添加點擊事件,數組.click()5 $(.chex).click(function(){6 //遍歷數組,數組.each()7 …

[WC2008]游覽計劃(斯坦納樹)

[Luogu4294] 題解 : 斯坦納樹 \(dp[i][j]\) 表示以\(i\)號節點為根,當前狀態為\(j\)(與\(i\)連通的點為\(1\)) 當根\(i\)不改變時狀態轉移方程是: \(dp[i][j] \min_{s \in j}\{dp[i][s] dp[i][\complement_js] - val[i]\}\) 當根…

使用dotnet template快速開發Microsoft Teams Outgoing Web Hook

在上一篇文章中,我們一步步從無到有在Microsoft Teams中開發了一個簡單的Outgoing Webhook,并和我們本地的Web API應用程序產生交互,總結起來的步驟大概如下: 導航到“團隊” Tab頁, 選中需要建立的Channel, 選中“應…

[Swift]LeetCode1013. 將數組分成和相等的三個部分 | Partition Array Into Three Parts With Equal Sum...

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★?微信公眾號:山青詠芝(shanqingyongzhi)?博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)?GitHub地址&a…

京津冀產業協同升級 智慧城市等高端產業需求遇熱

云計算、智慧交通、城市環保科技等高端智慧城市產業項目正成為京津冀產業協同的新關注點。 21日,在由北京市經信委、天津市工信委、河北省工信廳聯合組織的京津冀產業協同發展招商推介專項行動上,超過200家與會企業共完成產業對接項目額達311.7億元。與以…

Microsoft Teams:刪除成員賬戶其歷史聊天會發生什么?

介紹: 此博客文章的目的是演示從Office 365刪除用戶的賬號后,此用戶在Microsoft Teams群聊和私聊中的歷史聊天記錄會發生什么改變。 以下是Microsoft Teams聊天對話,其中Adele和其他團隊成員正在參與對話: 此外, Adele和Mega還在…

PostgreSQL Huge Page 使用建議 - 大內存主機、實例注意

標簽 PostgreSQL , Linux , huge page , shared buffer , page table , 虛擬地址 , 物理地址 , 內存地址轉換表 背景 當內存很大時,除了刷臟頁的調度可能需要優化,還有一方面是虛擬內存與物理內存映射表相關的部分需要優化。 1 臟頁調度優化 1、主要包括…

Microsoft Teams:團隊Owner離開公司后,我們該怎么做?

您是否曾在這么一個團隊里,該團隊唯一有Owner權限的人離開了公司?不幸的是,如果這個人不再在公司里,您可能覺得沒有辦法讓其他團隊成員再成為team的owner。我有一個簡單易用的解決方案,但您需要成為Office 365租戶的Admin或聯系你…

python網絡編程-socket編程

一、服務端和客戶端 BS架構 (騰訊通軟件:serverclient) CS架構 (web網站) C/S架構與socket的關系: 我們學習socket就是為了完成C/S架構的開發 二、OSI七層模型 互聯網協議按照功能不同分為osi七層或tcp/ip五…

使用PowerShell配置Microsoft Teams

作為 IT 專業人員, 我一直在尋找自動化任務的方法, 并使日常操作簡單。當使用Microsoft Teams時, 是否能夠在團隊中自動創建團隊,渠道和設置對于Microsoft Teams組建的成功與否至關重要。PowerShell對Microsoft Teams的支持使您可以做到這一點,它為我提供…

常見Kotlin高頻問題解惑

在筆者的Kotlin交流群里,不少同學反復遇到了一些相似的問題。這些問題大都比較基礎,但又容易產生誤解。因此,我決定寫一篇文章,整理群里同學遇到的一些問題 變量和常量的使用 在Kotlin語言中,我們使用var聲明變量&…

關于神經網絡訓練的一些建議筆記

關于網絡訓練時的參考建議: 1.train loss不斷下降,test loss不斷下降,網絡正在學習 2.train loss不斷下降,test loss趨于不變,網絡過擬合,需要增大數據;減小網絡規模dropout;權重衰減…

Microsoft Teams的保留策略

Microsoft Teams保留策略現在可在Office 365安全性和合規性中心里進行配置 今天,我們很自豪地宣布,我們正在開始推出針對Microsoft Teams的保留策略。 推出預計將在未來幾周內完成。 通過此次發布,Teams管理員可以使用Office 365安全性和合規…

八年溯源,如何巧搭區塊鏈

虎嗅注:區塊鏈正在逐步商業化,但最大的挑戰是共識。 為什么這樣說?因為商品的溯源防偽業務在過去正是因為缺乏信任感而沒有得到普及,這是每個溯源從業者最大的感受。 在虎嗅虎跑團每兩周一次線上分享會上,溯源鏈創始人…

數字簽名過程及數字證書

數字簽名是什么? 作者:David Youd 翻譯:阮一峰 原文網址:http://www.youdzone.com/signature.html 1.鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。 2.Bob把公鑰送給他的朋友們-Pat、Doug、Susan-- 每人一把…

Teams與OneDrive for Business和SharePoint的關系

作為一個相對看重個人信息安全與隱私的人,個人附件等資料在Microsoft Teams中的存儲方式、文件訪問權限、可見范圍問題引起了我的好奇。 眾所周知,Teams包含3大主要的模塊:單人聊天、團隊、會議。那下面讓我們一起來看一下,對這三…

hadoop學習筆記(二):centos7三節點安裝hadoop2.7.0

環境win7vamvare10centos7 一、新建三臺centos7 64位的虛擬機 master 192.168.137.100 root/123456 node1 192.168.137.101 root/123456 node2 192.168.137.102 root/123456 二、關閉三臺虛擬機的防火墻,在每臺虛擬機里面執行: systemctl sto…

index.html 的默認301或者302跳轉

index.html 的默認301或者302跳轉 <!DOCTYPE html> <html> <head> <title>Google</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> <script>window.locat…