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

教材学习内容总结

  • 第十章 多态性
  • 后绑定:
    • 多态性引用能够随时间变化指向不同类型的对象。
    • 程序执行会产生一些请求事件,要求执行某段代码来完成一个方法调用,这种请求事件称为一个方法调用与一个方法定义的绑定。对于多态性引用,绑定要延迟到程序运行时才执行,这一被延迟的的请求事件称为后绑定
    • 后绑定的效率要低于编译阶段的绑定效率,但灵活性更高。
  • 由继承实现多态性:
    • 一个引用变量可以指向有继承关系的任何类的任何对象。
    • 实际调用的方法版本取决于对象的类型而不是引用变量的类型。
    • 多态性的实质是,每个类都很清楚自己如何完成一个制定的行为。(SRP原则应该指的就是这个吧)多态机制允许用具有一致性但又独特的方式处理类似的对象。
  • 利用接口实现多态性:
    • 接口名可以用于声明对象引用变量
    • 一个接口引用变量可以指向实现该接口的任何类的任何对象。当使用接口引用变量时,只能调用定义在接口中的方法。
    • 方法的参数可以是多态性的,使得方法所接受的参数具有灵活性。
  • 排序:
    • 选择法排序:扫描整个数组找到最小值,将最小值与数列中第一个位置的值交换位置,循环下去就得到一个从小到大排列的有序列表。
    • Compareble接口包含一个返回整型值的方法compareTo:如果i=0, 也表明对象x与y排位上是相等的如果返回数值i>0 则意代表x > y,反之若i<0则代表x < y。
    • 插入法排序:不断地将一个新元素插入到已排好序的数列子集中,直到排序完成。
  • 搜索:
    • 线性搜索:
    • 二分搜索:从有序数列的中点开始搜索。

教材学习中的问题和解决过程

  • 问题1

实际调用的方法版本取决于对象的类型而不是引用变量的类型

这句话是怎么理解的?

  • 问题1解决方案:引用变量可以是多态性的,在不同的时间它可以指向不同的对象。引用变量指向什么对象时,就调用该对象的方法。
    就引用老师给的例子,Holiday类有一个celebrate方法,Christmas类覆盖了此方法。
    如果定义
    Holiday day1 = new Holiday();
    Christmas day2 = new Christmas();
    day1.celebrate();
    day2.celebrate();
    那么day1和day2引用的celebrate方法分别是Holiday类和Christmas类的celebrate方法。

  • 问题2:发现我连声明对象引用变量都不知道是什么意思。。。

  • 问题2解决方案:根据老师的讲课

对象引用变量可以指向其声明的类的对象,还可以指向任何因继承而发生关系的类的对象

也就是说,如果已经确定了“Creature”属于Animal类,那么它可以指向Animal下的任何子类,既可能指向pig类,也可以指向cat类。

  • 问题3:外层循环和内层循环?
  • 问题3解决方案:外层循环相当于是记住数组里的一个数,而内层循环相当于是将这个数与数组里剩下里的数做比较,分出大小。

代码调试中的问题和解决过程

  • 问题1:在对本章的代码进行编译时,出现了如图的情况

  • 问题1解决方案嘴上说着不愿意,但是身体似乎很诚实,当我焦头烂额地不知道怎么解决时,却发现编译出来的class文件就摆在那里!!!???在网络上简单地寻找了一下解决方案,似乎是我的JDK出现了问题(应该是版本的问题)

  • 问题2:同样使用IDEA也出现了让人很迷的问题,最基本的java.lang.*他无法识别。同样的String,compareTo等等最基本的东西一律是标红的,上图

  • 问题2解决方案:按着红色小灯泡的提示重新setupJDK,但是依然无法解决问题。重新下载JDK n次之后,还是没办法解决。于是我又重新温习了一遍Intelij IDEA简易教程,一开始以为是教程中提到的“不能都安装在Java文件夹的根目录下,JDK和Public JRE安装在同一文件夹会出错”引起的错误,但尝试将JDK和JRE分开存放之后依然提示错误。往下一看,发现老师提到了此问题,发现如IDEA提示一样需要SetupJDK但之前也做过此类尝试,按着他的要求无论是直接确定还是配置之后再确定,窗口一关一点反应都没有,所以这次索性就直接把IDEA里提示配置的JDK删除,重新下载一次JDK,再重新进行配置,终于这一次没有变红了!马上进行编译运行,又特么出现这样的提示

    然后我在网上搜索JAVA找不到或无法加载主类的解决方案,只得到了如下的解答

    重新设置环境变量之后依然无法解决,于是又换了一个关键词搜索

    仔细他给到的几个原因,突然想到是不是我的class文件出现了问题,返回去一看,果然是连bin文件夹都没有设置好(大写的尴尬),再重新设置一下,总算是设置没有问题了。
    不过我到最后都没有明白为什么IDEA会突然出现这样的问题。

代码托管

上周考试错题总结


  • 错题1:Abstract methods are used when defining
    A . interface classes
    B . derived classes
    C . classes that have no constructor
    D . arrays
    E . classes that have no
  • 解析在interface中所有的方法都是public abstract的,即使你没有申明它是public abstract的。

  • 错题2: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
    B . All classes must have 1 child (derived or extended) class but may have any number of parent classes
    C . All classes must have 1 parent class and may have a single child (derived or extended) class
    D . All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes
    E . All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes
  • 解析Java支持继承,但不是多重继承,所以Java类可以有任意数量的子节点,但只有一个父节点object(类的父类也可看成是object类)。 而且,由于所有Java类都直接或间接地从对象类继承,所以所有Java类都有一个双亲类。

  • 错题3:A variable declared to be of one class can later reference an extended class of that class. This variable is known as
    A . protected
    B . derivable
    C . cloneable
    D . polymorphic (多态)
    E . none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
  • 解析:术语“多态性”(polymorphic)可以理解为“有许多形式”。在一般情况下,一个变量,一旦声明为某一类型,就永远不能改变为其他类型。唯一的例外是多态变量可以是任何类型的派生类(尽管不是在同一时间,变量可以从一种类型转换为另一种类型)。

  • 错题4:In order to determine the type that a polymorphic variable refers to, the decision is made
    A . by the programmer at the time the program is written
    B . by the compiler at compile time
    C . by the operating system when the program is loaded into memory
    D . by the Java run-time environment at run time
    E . by the user at run time
  • 解析:多态变量可以有许多不同的类型,但是在程序执行之前,它不知道它采用了哪种类型。在这个变量被引用的时候,必须做出决定。这个决定是由运行时环境根据变量的最新赋值决定的。多态性引用能够随时间变化指向不同类型的对象

  • 错题5:Using the reserved word, super, one can
    A . access a parent class'constructor
    B . access a parent class'methods and instance data
    C . access a child class'constructor
    D . access a child class'methods and instance data
    E . none of the above
  • 解析:保留字super提供了一种机制来访问父类的方法和实例数据(不管它们是否被隐藏),此外也可以用来来访问父类的构造器,所以这道题的A、B选项都是正确的。

  • 错题6:Interface classes cannot be extended but classes that implement interfaces can be extended.
    A . true
    B . false
  • 解析任何类都可以被扩展,无论它是一个接口,还是实现接口的类,或者两者都不是但如果该类用“++final++”这个词进行修饰,在这种情况下,它不能被扩展。

  • 错题7: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.
    A . true
    B . false
  • 解析:派生类可以重新定义父类的任何实例数据或方法。父类的数据虽然是隐藏的,但是可以通过使用super来访问。

结对及互评

  • 博客中值得学习的或问题:

    • 编程项目过程的记录真的是值得学习,我每一次都是做过了就过了,不懂得怎么去记录编程的过程。
  • 代码中值得学习的或问题:

    • 两位同学的代码都是能看出有前瞻性,他们从写代码的开始就能把思路基本理清,值得学习。
  • 基于评分标准,我给谭鑫的博客打分:12分。得分情况如下:
    正确使用Markdown语法(加1分)
    模板中的要素齐全(加1分)
    排版精美(加1分)
    错题学习深入(加1分)
    点评认真,能指出博客和代码中的问题(加1分)
    问题7个(加7分)

  • 基于评分标准,我给方艺雯的博客打分:12分。得分情况如下:
    正确使用Markdown语法(加1分)
    模板中的要素齐全(加1分)
    错题学习深入(加1分)
    点评认真,能指出博客和代码中的问题(加1分)
    问题8个(加8分)

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172305
    • 20172314
    • 结对照片
    • 结对学习内容
      • 多态性
      • 结对编程练习四则运算
  • 上周博客互评情况

其他

这章的学习主要需要结合课本中提供的例子来学习,其中排序和搜索的概念应该多加复习,尽快掌握。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 117/117 1/1 19/19
第二周 289/406 1/2 21/40
第三周 403/809 2/4 22/62
第四周 1783/2592 1/5 35/97
第五周 770/3362 1/6 25/122
第六周 734/4096 1/7 25/147
第七周 687 / 4783 1/8 25/172
第八周 824/5607 2/10 30/202
  • 计划学习时间:20小时

  • 实际学习时间:30小时

参考资料

posted @ 2018-05-02 19:22  二许  阅读(318)  评论(5编辑  收藏  举报