20172316 2017-2018-2《程序设计与数据结构》第八周学习总结
教材学习内容总结
- 本章的核心词是多态性。
- 开篇介绍了绑定,特别是后绑定。绑定就是将方法名和执行的对象对应起来,从而区别同一方法在不同对象上的应用。前(静态)绑定是编程时早已确定好的,绑定效率高。后(动态)绑定效率低,但胜在灵活,本章要用到的绑定方式就是后绑定。
- 多态性,我理解的就是同一方法可以作用于不同的类的性质。
- 实现多态性有两种方式:继承、接口。
由继承产生的多态性我们已经见识过了,ArrayList在未规定元素类型之前可以存储任何一类的对象,因为所有的类都是Object类的子类。书中例子move()
是一个方法,引用变量Animal creature = new Horse
指向Horse
后(Horse是Animal子类),creature.move()
就调用Horse
中的move()
方法。
利用接口实现多态性也很方便,感觉和继承中的抽象类实现多态性十分相似。接口可以继承接口、类可以继承接口,但接口不能继承类。 - 排序,书中有两种排序:选择法排序、插入法排序,排序的基础是Comparable接口的实现。通过比较“大小”对对象进行有序的排列。签证所执行的交换操作次数少,优于插入法。
- 搜索,书中提供两个搜索:线性搜索、二分搜索,二分搜索效率较高,但前提是搜索池已经过排序。
教材学习中的问题和解决过程
本周教材学习中无重大问题,老师和助教解答很详细。
代码调试中的问题和解决过程
问题1:想要尝试一下继承实现多态,基本思路为Demo类中
i = 4
,SuperDemo类中i = 7
,最后输出结果应该是SuperDemo类中的7
,结果却是SuperDemo = 0
。问题1解决方案:查找网上类似的问题,得到一点启发。执行
new SuperDemo()
的时候先调用了父类的Demo()
,而该构造里边又引用了子类的show
方法,但那时候子类构造还未执行,i
变量仅仅被分配了内存并赋予默认的0
,所以打印的是0
。应该是这样。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
错题1: Which of the following is true regarding Java classes?
正确答案:A .All classes must have 1 parent but may have any number of children (derived or extended) classes
原因:每一个类都直接或者间接的是Object类的子类。错题2:A variable declared to be of one class can later reference an extended class of that class. This variable is known as
正确答案:D .polymorphic
原因:没有很好的理解题目意思,以为是“一个类中的变量可以被自己的子类引用”之类的,从而误选为protected。错题3:In order to determine the type that a polymorphic variable refers to, the decision is made
正确答案:D .by the Java run-time environment at run time
原因:多态性引用的类型判断是在程序运行时,也就是动态绑定。错题4:Using the reserved word, super, one can
正确答案:E .none of the above
原因:super保留字既能引用构造函数,也能引用方法和数据。错题5:If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but can not redefine x to be a different type.
正确答案:B .false
原因:这是可以实现的,通过保留字super的使用。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 195/195 | 1/4 | 20/20 | 对代码产生了很大兴趣 |
第二周 | 309/504 | 1/5 | 20/40 | 打字速度明显提升 |
第三周 | 311/815 | 2/7 | 25/65 | 无 |
第四周 | 474/1289 | 1/8 | 30/95 | 抗...抗压能力加强? |
第五周 | 260/1549 | 1/9 | 15/110 | 了解到预习的重要性 |
第六周 | 358/1907 | 2/11 | 20/130 | 打字速度明显提升 |
第七周 | 780/2687 | 2/13 | 15/145 | 学会使用JUnit |
第八周 | 2124/4811 | 2/10 | 15/160 | 无 |
结对互评
- “向上转型与向下转型”不是教材学习中的问题,而是测验中的问题,不过总结得很好;
- PP10.4输出结果可以更整齐。
20172329王文彬 - 对于参考材料的引用直接使用截图可能不是一个好的选择。
参考资料
- 《Java程序设计教程(第八版)》电子工业出版社
- 《使用码云和博客园学习简易教程》
- 《使用开源中国(码云)托管代码》