20172316 2017-2018-2《程序设计与数据结构》第八周学习总结

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小时
第五周 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

参考资料

猜你喜欢

转载自www.cnblogs.com/zhaoqianchen/p/8982310.html