来谈谈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.mzph.cn/news/278122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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 …

使用dotnet template快速开发Microsoft Teams Outgoing Web Hook

在上一篇文章中,我们一步步从无到有在Microsoft Teams中开发了一个简单的Outgoing Webhook,并和我们本地的Web API应用程序产生交互,总结起来的步骤大概如下: 导航到“团队” Tab页, 选中需要建立的Channel, 选中“应…

Microsoft Teams:删除成员账户其历史聊天会发生什么?

介绍: 此博客文章的目的是演示从Office 365删除用户的账号后,此用户在Microsoft Teams群聊和私聊中的历史聊天记录会发生什么改变。 以下是Microsoft Teams聊天对话,其中Adele和其他团队成员正在参与对话: 此外, Adele和Mega还在…

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的支持使您可以做到这一点,它为我提供…

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…

在Microsoft Teams中的Visio协作

所有Team站点都带有专用文件库,用于存储所有工作组的内容。 您现在可以从桌面或云存储站点将Visio文件上载到此库,例如,您所在Team的资产都集中在一个位置,供具有权限的任何人进行访问。与其他存储文件一样,您可以直接…

用区块链打击假新闻 这可能是最2017年的一件事

据外媒报道,非营利性基金会PUBLIQ公布了一个基于区块链打造的平台。这是一个用于创建和分享原创新闻和媒体内容的平台,它将在近期推出。据了解,PUBLIQ创建这一平台则是希望能借用类似于比特币一样的系统来打击假新闻。 通过创建一个受信任的经…

oo面向对象第一单元总结

oo第一次作业主要考察了多项式的求导,从简单的幂函数求导到三角函数求导再到嵌套函数的求导,难度循序渐进,对我们对于面向对象的理解的要求也在一次一次提升。一行行代码打下来,一夜夜熬过去,我也来到了这个短暂的停靠…

Microsoft Teams免费版本初体验

Microsoft Teams推出有一段时间了,如果想要体验Teams,必须需要有Office365的订阅。最近微软为了进一步推广Teams,突然宣布Teams免费了。使用过Teams的读者知道Teams是基于Office365账号和组的,那它免费后,不使用Office…

强制禁用gitlab的双因子认证:Two-Factor Authentication

(一)问题描述: 此博客解决如下问题:禁用gitlab的双因子认证 禁用前,如图(此时,你在gitlab中什么也干不了) (二)思路分析: 百度了很多方法&#xf…

如何将Outgoing Webhook部署到中国版Azure

在这篇文章中,我们主要来如何将Azure DevOps中的项目作为应用发布到中国版Azure的App Service中。 什么是Azure DevOps Azure DevOps, 原名为VSTS, 全称是Visual Studio Team System,是由微软开发的一套具有高生产力、高集成性、可扩展的生命周期开发工…

Google SRE 读书笔记 扒一扒SRE用的那些工具

写在前面 最近花了一点时间阅读了《SRE Goolge运维解密》这本书,对于书的内容大家可以看看豆瓣上的介绍。总体而言,这本书是首次比较系统的披露Google内部SRE运作的一些指导思想、实践以及相关的问题,对于我们运维乃至开发人员都有一定的借鉴…

Microsoft Teams的Meet Now功能

今天,我们宣布完成了Skype for Business to Teams路线图中首次披露的几项关键会议功能。当个人联系,沟通和协作时,工作就自然而然的完成了,我们相信这些功能(除了我们2月的公告之外)使Microsoft Teams为所有…