20155313 2016-2017-2 《Java程序设计》第四周学习总结
20155313 2016-2017-2 《Java程序设计》第四周学习总结
教材学习内容总结
6 继承与多态
面对对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用集成,滥用集成而导致程序维护上的问题时有所闻。继承基本上就是避免多个类间重复定义共同行为。书本中举了一个RPG游戏中设定一个角色剑士的例子。
public class SwordsMan {
private String name;
private int level;
private int blood;
public void fight() {
System.out.println("挥剑攻击");
}
public int getBlood() {
return blood;
}
public void setBlood(int Blood) {
this.blood = blood;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
从实际例子出发我们发现,只要在游戏中出现一个角色,我们就要给他设定一个具有角色名称、等级与血量的类,而不同的职业,类似魔法师、术士之类他们也需要设定名称、等级与血量,也就是说在编写程序的时候会出现重复。然而重复在程序涉及上就是不好的信号。如果游戏在运营的过程中需要将name、level、blood改成其他名称,或者给所有角色增加一个怒气值,那就要对所有的类进行修改,这样在维护的过程中需要花更多的时间同时也容易出现纰漏。
因此在这里就需要将相同的代码程序提升为父类:

这个类在定义上没什么特别的信誉发,只不过是将SwordsMan与Magician中重复的程序复制过来。接着SwordsMan可以如下继承Role:

这里出现了新的关键词extends,这表示SwordsMan会扩充Role的行为,也就是继承Role的行为,再扩充Role原本没有的fight()的行为。类似一种公共调用的函数,所有输入extends Role定义的类可以使用Role里面所有的设定,并且在自己的类中定义属于自己的属性。类似地Magician也可以如下定义继承Role类:

Magician继承Role的行为,再扩充了Role原本没有的fight()与cure()行为。例如你还可以设定一个角色小偷:
package cc.openhome;
public class Thief extends Role {
public void steal() {
System.out.println("偷东西");
}
public void run() {
System.out.println("逃跑");
}
}
这个小偷能偷东西和逃跑。
最后使用一个RPG的程序使被继承的属性显示出来:

继承的捞出之一,就是若你要将name、level、blood改成其他名称,那就只要修改Role.java就可以了,只要使继承Role的子类都无须修改。
在Java中,子类只能继承一个父类,继承除了可避免类间重复的行为定义外,还有个重要的关系,那就是子类与父类间会有is-a的关系,中文成为“是一种”的关系。以前面返利来说,SwordsMan继承了Role,所以SwordsMan是一种Role(SwordsMan is a Role),Magician继承了Role,所以Magician是一种Role。
现在需要将游戏中所有角色的血量显示出来,这时候就需要使用单一接口操作多种类型的对象,这种方法也叫多态。下面的范例中,在showBlood()方法中,既可以通过Role类型操作SwordsMan对象,也可以通过Role类型操作Magician对象。
在上面我们显示了角色的血量,现在我们需要播放角色攻击动画。书本中将fight()方法提升至Role类中定义:
pacakge cc.openhome;
public class Role {
···
public void fight() {
// 子类要重新定义fight()的实际行为
}
}
在Role类中定义了fight()方法,由于实际上角色如何攻击,只有子类才知道,所以这里的fight()方法内容是空的,没有任何程序代码执行。SwordsMan继承Role之后,再对fight()的行为进行定义:
package cc.openhome;
public class SwordsMan extends Role {
@Override
public void fight() {
System.out.println("挥剑攻击");
}
}
同样地,Magician继承Role之后,再对fight()的行为进行定义:
package cc.openhome;
public class Magician extends Role {
@Override
public void fight() {
System.out.println("魔法攻击");
}
public void cure() {
System.out.println("魔法治疗");
}
}
如果某方法区块中没有任何程序代码操作,可以使用abstract表示该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。例如:
package cc.openhome;
public abstract class Role {
private String name;
private int level;
private int blood;
public abstract void fight();
}
类中操作接口,使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法:
public class name3 extends name1 impelments name1{
...
}
二是再度将该方法标示为abstract:
public abstract class name3 implements name4{
...
}
在Java中,可使用interface来定义抽象的行为与外观,如接口中的方法可声明为public abstract :
public interface Swimmer{
public abstract void swim();
}
在interface中可以定义常数,java中经常见到在接口中定义这类常数,称为枚举常数。
代码托管
- 代码提交过程截图:
- 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图

- 代码量截图:
- 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图


不知道为何在总文件夹中无法显示代码数量,因此进入子文件夹分开显示,要到存在src的文件夹的目录才能查找,有些更小的工程没有进行截图,但总代码量应该在500行左右。
错题总结
- 填空:Linux Bash中,(grep )命令可以进行全文搜索。
- CH04 填空:p86 命令行下编译Guess.java的命令是(javac -d . Guess.java)
- CH04 判断: Java中,=与==并没有在基本类型和类类型的不同。(OK)
- CH04 填空:两个Integer对象比较大小,可以使用(compareTo())方法
- CH04 填空: p109 Average.java 求1,2,3,4,5的平均值的命令是(java cc.openhome.Average 1 2 3 4 5
- CH05 判断:Java中类总会有默认构造方法。(X)
- CH05 填空:调用p145 sum函数计算1+2+3+4+5的代码是(MathTool.sum(1,2,3,4,5))
- CH05 填空:Java中方法参数只用(传值)调用。
- CH05 填空:被声明为(static)的成员,不属于某个对象,而是属于类。
- CH05 判断:Java中方法内可以定义类。(OK)
学习进度条
| 代码行数(新增积) | 博客量(新增积) | 学习时间(新增积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第四周 | 500/500 | 1/2 | 20/20 |
参考资料
20155313 2016-2017-2 《Java程序设计》第四周学习总结的更多相关文章
- Java程序设计第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...
- 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈
对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...
- 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结
<面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...
- 20155318 2016-2017-2 《Java程序设计》第九学习总结
20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...
- 《Java程序设计》第二学习总结
<Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 20145120黄玄曦 《java程序设计》 寒假学习总结
1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
随机推荐
- pandas 入门
1. 默认的pandas不能读取excel.需要安装xlrd, xlwt才能支持excel的读写 pip install xlrd #添加读取excel功能 pip install xlwt #添加写 ...
- Burnside引理和Polya定理
转载自:https://blog.csdn.net/whereisherofrom/article/details/79631703 Burnside引理 笔者第一次看到Burnside引理那个公式的 ...
- PHP笔记09:PHP之 MVC理解
1. 首先通俗地说说我对MVC的理解: Model是负责干活的,它干的活主要是从数据库中获取需要的数据以及对获取的数据按照业务逻辑进行加工处理,至于为什么要干某件活,何时干某件活它一概不管,而这正是C ...
- Spring JPA 主键
JPA主键生成器和主键生成策略 JPA中创建实体时,需要声明实体的主键及其主键生成策略.我们有一个实体类叫做Email,其主键上声明如下: @Id @Column(name = "EMAIL ...
- F2eTest和uirecorder自动化测试环境部署填坑记录
坑1:尝试部署的时候只在opennode.bat里面填写了两个浏览器,测试通过后再增加其他浏览器,页面上一直不显示. 填坑:需要清空数据库里的`wd_browsers`和`wd_nodes`表,然后重 ...
- Linux常用监控服务器性能命令
列举比较常用的几种监控服务器性能的Linux命令.其实,在我看来,目前针对Linux系统内存.硬盘.TCP/IP等等相关的指标,Linux本身自带的或者是一些开源项目等基本上都能达到这个获取服务器性能 ...
- Python中获取异常(try Exception)信息
异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置. 这里获取异常(Exception)信息采用try...except...程序结构.如下所示: try: ... exce ...
- 一点一点看JDK源码(〇)
一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人, ...
- Oracle 安全性一
创建和管理数据库用户账户 用户账户属性 用户账户拥有很多在创建账户时定义的属性.这些属性将应用于连接到账户的会话,在会话运行期间,DBA或会话可以更改其中一些属性. 用户名 身份验证方法 默认表空间 ...
- iOS TabBarItem设置红点(未读消息)
实现原理: 其实是自定义一个view,将view添加到UITabBar上面,也可以是一个按钮,设置背景图片,和label.废话少说直接上代码搞一个UITabBar的分类 #import <UIK ...