201521123002 《Java程序设计》第4周学习总结
1. 本周学习总结
2. 书面作业
1.注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
参考文章
Eclipse添加注释简介
Eclipse注释模板设置详解
答:进行注释主要有两种方法:
1.一种是老师上课用到的手动注释再运用一些标签
显然这样有些麻烦。有没有自动生成的办法呢?回答是有的。
2.把光标放在要注释的类或方法上,按快捷键alt+shift+j
or source》Generate Element Comment,但是这样的注释格式是系统默认的较为粗暴简单,没关系我们还可以自己进行格式修改。
打开:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点,选中你要添加注释的类型,然后点击edit
在pattern里按“ctrl“+”/”键,选择要添加的种类,例如日期,作者、时间、返回类型等等……
设置好以后,会在上图的pattern下生成相应代码
现在用方法二来对之前写过的类和方法进行注释
对Rectangle类进行注释
对setname方法进行注释
对getPerimeter方法进行注释
2.面向对象设计(大作业1,非常重要)
2.1将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
答:最近在学习java,决定上当当网上买一些参考书,在搜索栏输入java,就会出现8050本有关java的书籍,点击一本查看具体信息,有书名、作者、价格、出版社、出版日期还有简介,觉得这本书不错加入购物车,想多了解一下这个作者的其他书籍,点击作者弹出一个界面显现作者其他的书籍,又选了一本加入购物车。点击购物车,就会看到刚刚选中的书本,发现总价有点贵,打算先买最想要的那本,点击删除了一本书。点击结算,弹出订单界面要求输入收货地址,提交订单,支付。
2.2通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
答:如图
2.3尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
参考资料:
UML类图
面向对象案例-借款者姓名地址.zip
3.ManagerTest.zip代码分析
分析ManagerTest.zip中的代码,回答几个问题:
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
答:Manager类 extends Employee类,
复用的方法:
图中super可知服用了父类的
复用的属性:
3.2 Employee
类及其子类Manager
都有getSalary方法,那怎么区分这两个方法呢?
答:用super来区分getSalary(),super.getSalary()是父类的。
3.3 文件第26行e.getSalary()
,到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
答:ppt中有这样一句话
对于子类重写的方法,JVM根据调用该方法的实际对象的类型来决定选择调用哪个方法。
现在我们具体分析所给材料:
可知对于staff[0]调用的是Manager的getSalary方法,staff[1]、[2]调用的是Employee中的getSalary方法。
3.4 Manager
类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
答:我们使用继承就是为了避免代码的冗长,用super可是使代码变得更叫简洁而且提高了代码的效率,学到目前尚未发现用super有什么坏处。
4.Object类
4.1 编写一个Fruit
类及属性String name
,如没有extends自任何类。使用System.out.println(new Fruit());
是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
答:这种题目就放到eclipse里试一下
结果显示:
如过没有继承任何类,则继承的是Object类,Object类是所有类的父类,Fruit调用的是Object本身的toString方法。
查看Object本身的toString方法的源代码:
输出对象所属的类名和散列码。
4.2 如果为Fruit
类添加了toString()方法
,那么使用System.out.println(new Fruit());
调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
答:用eclipse自动生成一个toString方法,如果要用父类的toString方法,可以用super这个关键字
结果为:
4.3 Fruit类还继承了Object
类的eqauls
方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true
。(使用代码证明你自己覆盖的eqauls方法是正确的)
答:查看源代码
Object类中equals方法用来判断两个对象是否具有相同的引用。
然而,对多数类来说这种判断意义不大。
所以子类经常覆盖其equals方法,对其内容进行比对。
编写equals有两种方法一种可与用eclipse自动生成但是它还需要稍微的修改一下,不然不会忽略大小写,另一种就是自己编写啦
public boolean equals(Object object) {
if (this == object)
return true;
if (!(object instanceof Fruit))
return false;
Fruit fruit = (Fruit) object;
if (this.name == null) {
if (fruit.name != null)
return false;
} else if (!this.name.equalsIgnoreCase(fruit.name))
return false;
return true;
}
运行结果
5.代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系
答
5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
答:运行不出来
那就说说自己的分析结果
创建一个长度为4的Person数组,age升序
Student类和Employee类是继承自Person类,而Manager类和Programmer类是继承自Employee类的,
那么Manager类和Programmer类有两成嵌套
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
答:super构造函数是调用了父类的构造函数,不可以,会出现错误,因为去掉super本来可以调用父类的无参构造函数,但是没有无参构造函数所以会出现错误
5.4 PersonTest.java
中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
答:这里体现了多态
如果说我觉得多态有什么好处,一时半会好像还说不上来,可能是更灵活,代码不会显的太过冗长,提高代码效率等,查查资料发现那些讲的概念对我来说还是有些抽象,继续学习吧
多态来自继承,是继承的发展,继承是子类继承父类,而多态是父类的引用可以调用子类的对象。
参考文件:PersonTest.java
3. 使用码云管理Java代码
4. 实验总结
题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
函数(4-1, 4-2, 4-3,4-4较难选做)
编程(5-4, 5-5, 5-6)
这次题目看起来有点多,但是认真去做还是发现不会特别难,
1.都是对新学的内容的巩固,这题用到了继承,可以抽象一个类,然后运用sumAllArea和sumAllPerimeter方法。
2.这题按照题目要求认认真真一步一步下来就好,其中eclipse可生成很多的代码节省了不少时间,然后对contain方法也进一步熟悉,但是输出格式还是有些问题,比如eclipse自动生成的是按照属性从上到下的顺序,但是如果我编写的时候没有按照输出的格式编写就会导致输出错误。这个问题还是比较难发现的,所以要小心。
3.没什么大问题,就是对覆盖的熟悉吧,慢慢做,一步一步来。