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小时

    参考资料

  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/Lewandodoski/p/8969831.html
Copyright © 2011-2022 走看看