201521123032 《Java程序设计》第4周学习总结

1. 本周学习总结

1.1 尝试使用思维导图总结有关继承的知识点。

1.2 使用常规方法总结其他上课内容。

本周学习了继承,了解其中的父类与子类。了解到类,以及如何识别类,对于名词可以考虑是否创建相应的类或是某个类的属性;对于动词可以分析是否可以当作方法。

2. 书面作业

1注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)


2.面向对象设计(大作业1,非常重要)

2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字)

小明打开网上商城的网页,在搜索窗口输入书包,网页上便跳出了书包的图片,小明喜欢第二个书包,他点击后便得知书包的品牌,价格。他将这个书包加入购物车,想给弟弟也买一个,在订单上编辑数量那里修改了数量后点击结算,填写完姓名电话地址后,付款。

2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。

2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)

3.ManagerTest.zip代码分析

分析ManagerTest.zip中的代码,回答几个问题:

3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

extends关键字和super关键字体现使用继承实现代码复用,调用父类getsalary方法;“super(n, s, year, month, day);”调用父类的构造函数,“ bonus = 0;”是对自己特有的属性进行初始化。

3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

当e指向一个Employee对象时,e.getSalary()会调用Employee类中的getSalary方法;而当e指向一个Mannager对象时,e.getSalary()会调用Manager类中的getSalary方法。虚拟机知道e所指对象的实际类型,因此它会调用正确的方法。 参考:http://www.docin.com/p-371436579.html

3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

调用Employee类的getSalary方法。

3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?

实现代码复用就减轻了打代码的负担,把父类的相关代码复制黏贴看起来更直观也会更加繁琐。如果要修改类似的代码,只需修改一些地方,如果使用黏贴方法就要大面积的修改,只会耗费更多精力。

4.Object类

4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?

直接输出对象的时候会调用toString()方法。

4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)

还有。使用super关键字。

4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)

5.代码阅读:PersonTest.java(abstract、多态)

5.1 画出类的继承关系

5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因

推测的代码运行结果为Employee,Student,Programmer,Manager按年龄从小到大排序,并按顺序输出每个人的信息。真正的运行结果还加入了toString,分析后发现注重关注main函数忘了还有父类与子类之间的关系,忘了看下面的代码。

5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

作用是父类中的代码复用,如果将子类中的super构造函数去掉也可以,不过要自行编写程序。

5.4 为什么Person中的getDescription要声明为abstract?

当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。 参考:http://www.cnblogs.com/suneryong/p/3571362.html

5.5 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?

继承就体现了多态,继承是多态的基础。多态的好处就是因为编译器会自动就找出合适的对象来执行操作。

3. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4. PTA实验

题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
函数(4-1, 4-2, 4-3,4-4较难选做)
编程(5-4, 5-5, 5-6)
一定要有实验总结
感觉自己对于编程有点吃力,课上听完后一到编程就手足无措,感觉使用继承的方法不是很适应,一直出错。对于覆盖的理解就更吃力了。

原文地址:https://www.cnblogs.com/hdf433/p/6575733.html