开发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

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

  1. 谈谈java面向对象之抽象,手把手带你搞定java面试之面向对象

    计算机语言晦涩难懂,打算利用通俗易懂的文字带领大家学习java基础.如果文中有什么错误的地方,欢迎大家在评论区指正,免得我误人子弟. Question:当面试JAVA开发岗位的时候,面试官最爱问的问题 ...

  2. 谈谈java面向对象思想_对于Java面向对象思想的理解

    在Java中,除了8种基本数据类型.其他皆为对象! 面向对象主要有 三个基本特征:封装,继承,多态. 封装 主要概念是指:隐藏对象的属性和实现细节,仅对外暴露公共的访问方式.封装是面向对象最基本的特征 ...

  3. 三篇文章彻底搞懂Java面向对象之一

    写在前面,Java基础系列文章都是作者基于b站尚硅谷的Java基础视频所做的笔记,没有时间的同学可以认真看看,如果有时间的同学,还是建议看看视频,毕竟笔记说到底还是自己的东西,每个人的习惯也是不一样的 ...

  4. 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  5. 如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)

    二 Java面向对象 类和对象 1.1 什么是面向过程?什么又是面向对象? 面向过程--步骤化 面向过程就是分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用即可 面向对象 ...

  6. 孙卫琴:我为什么要写《Java面向对象编程》

    孙卫琴:我为什么要写<Java面向对象编程> 特约作者:孙卫琴 策划 & 设计 & 制作:李大微 当<精通Struts>和<精通Hibernate> ...

  7. 谈谈Java与C#的区别

    先听一个故事:Java与C/C++/C#的历史渊源 1972年的某一天,一个被称为"上帝的编程语言"的工具就此诞生,它是基于B语言的改进,并被正式命名为C语言.凭借着自身的优秀特性 ...

  8. java面向对象的全面分析

    由于文章可能过长,看自己需要的部分即可-我尽量把java面向对象讲得全面一点,尽量让有一点点Java学习基础的同学也能看得懂,了解的深度也足够. 若在文章中发现了什么问题或者不太理解的地方-请及时评论 ...

  9. java封装是什么_java封装是什么?Java面向对象的封装

    java封装是什么? 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据 ...

最新文章

  1. 错误 - 无法访问IIS元数据库
  2. msb Lesson00_Object_Class.scala
  3. 正确理解hibernate的inverse属性
  4. PHP Deprecated: Function ereg_replace() is deprecated in 的解决方法
  5. Android 5.0新特性
  6. web项目下的web.xml listener监听总结
  7. 华为一季度每天入账20亿,首次披露云业务用户超100万
  8. wps计算机一级考试提纲,2017计算机一级考试大纲:WPS Office (汇总)
  9. 【例9.7】友好城市
  10. Linux内核开发_2_Initramf
  11. c 语言基础笔试题1
  12. Filebeat Filter - Dissect/DNS Reverse
  13. C语言斐波那切数列数列求和
  14. 怎么查询上网帐号和上网口令_宽带上网账号和密码忘记了该怎么查询
  15. 博客实名与一年前的预言
  16. 分布式数据库CAP理论
  17. DBC文件的编辑方法
  18. Unreal Engin_画廊制作笔记 _004灯光处理,添加灯光
  19. 【98期】面试官:给我说说你对Java GC机制的理解?
  20. 行人重识别数据集Person Re-Identification Datasets(全)

热门文章

  1. 全国计算机等级考试题库二级C操作题100套(第02套)
  2. 阿里巴巴开发规范集合处理
  3. java lambda 表达式中的双冒号和箭头的用法 ::
  4. docker启动报错  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --
  5. java关键字整理_【java基础知识整理】java基础语法之关键字
  6. Linux中Shell的转义用法笔记
  7. jsp java注释_jsp注释方式
  8. Python3的方法解析顺序(MRO)
  9. 印发 指南 通知_通知设计的综合指南
  10. web登录界面设计_出色的Web界面设计的7条规则