zoukankan      html  css  js  c++  java
  • 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小时

    参考资料

  • 相关阅读:
    递归练习:走台阶
    递归练习:计算最大公约数和最小公倍数
    递归练习:逆序输出一个十进制数的各位数字
    m4, autoconf
    Makefile 和 CMakeLists.txt
    Java中的String pool
    小米路由Mini刷Breed, 潘多拉和LEDE
    Centos 编译LEDE/OpenWrt
    Centos6下编译安装gcc6.4.0
    IntelliJ IDEA遇到Unable to parse template “Class”错误
  • 原文地址:https://www.cnblogs.com/Lewandodoski/p/8969831.html
Copyright © 2011-2022 走看看