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

教材学习内容总结

  • 本周学习第九章继承。
  • 创建子类:
    • 继承是从现有类派生新类的过程。
    • 创建子类的目的之一就是复用现有软件,避免了可能产生错误的代码复制和修改。
    • 用于派生新类的原始类称为父类,被派生出的类称为子类。Java用保留字extend指明新类由现有类派生。继承在父类和子类之间建立一种“是”关系。
    • protected修饰符:protected可见性提供了允许继承的最大可能的封装性。所有的方法和变量都将由子类继承,并且为变量预留内存空间。但是,构造方法不会继承。
    • super引用:super引用可以调用父类的构造方法。也可以用于调用子类中重载方法的父类版本
  • 方法重写:子类和父类有相同的方法名和签名时,子类方法将重写父类方法。 构造方法是一个特殊的方法,子类不能重写其父类中的构造方法。final方法也是不能被重写的。
  • 类层次结构:一个类的子类还可以是一个或多个其他类的父类,由此建立起类层次结构。
    • 继承机制具有传递性,应当合理地将类的公共特征保持在尽可能高的类层级上。
    • 所有的Java类都直接或间接地由object类派生。
    • 抽象类:可用abstract修饰符见过一个类声明为抽象类。不能实例化抽象类。抽象类代表一种概念,子类将基于这种概念来定义方法。由抽象类派生的子类必须重写所有父类的抽象方法,否则该子类仍然是抽象类。
    • 接口层次结构:继承的概念可以应用到接口,以便由一个接口派生另一个接口。
  • 可见性
  • 继承的限制:final修饰符可用于限制继承。

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

  • 问题1:protected修饰符的作用
  • 问题1解决方案:一个声明为具有protected可见性的变量或方法,可以由子类按名字引用,同时还保持了某种程度的封装性。protected可见性给同一包中的任何类赋予访问权。
  • 问题2:为什么子类必须重写其父类中的toString方法?
  • 问题2解决方案:即使在当前的程序中该方法没有被子类调用,也应在子类中重写父类的toString方法,为避免以后出现问题。因为以后可能有人在直接使用该子类或继承子类时,会认为该子类已经存在一个有效的toString方法。

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

  • 问题1:PP9.1中,首先我对“声明一个变量来保存硬币面值”就有一些困惑,硬币面值是如何定义的,怎么样才算作将硬币面值保存在变量中。
  • 问题1解决方案:重新理解了一遍Coin的定义,我觉得题目所指的硬币面值在这里指的应该是硬币的当前状态--“当硬币为正面时用0表示,当硬币为反面时用1表示”。而保存硬币面值应该是指声明一个变量,使得父类通过flip方法得到的硬币面值face保存在该变量中,使得在子类中可以使用新声明的变量引用父类的值。于是我最后的定义是
  • 问题2:PP9.1题目中要求的计算若干个MonetaryCoin对象的和?
  • 问题2解决方案:在之前的分析中,我已经默认硬币面值为表示硬币的当前状态,求和不知道有何意义。但也只有照做,运行结果如图
  • 问题3:如图所示
  • 问题3解决方案:变量的声明和定义语句不能放在同一个句子中运行,应该修改成int sum = 0; sum += coins[x].getFacevalue();
  • 问题4:上周提到的IDEA无法上传的解决。博客链接
  • 问题4解决方案:运用最粗暴简单的方法,把本地的项目再次删除(始终保持一周一次的删除频率)再次克隆下来,重新设置了一遍,目前来说是可以了。

代码托管

上周考试错题总结


  • 错题1:An array index cannot be a float, double, boolean or String.(数组索引不能是float,double,boolean或String)
    A . true
    B . false
  • 解析:正确。数组索引必须是int类型,或者可以扩展为int类型的值(因此,char、byte和short也是允许的)。

  • 错题2:It is possible to sort an array of int, float, double or String, but not an array of an Object class such as a CD class.(可以对数组中的int、float、double或String进行排序,但不能对对象类(如CD类)进行排序。)
    A . true
    B . false
  • 解析:只要类型有某种机制来比较两个元素并确定它们的正确排序(小于、相等、大于),就可以对任何类型的数组进行排序。因此,如果CD类有一个compareTo方法,那么就有可能对它们进行排序。

  • 错题3:Although methods may be declared with a variable length parameter list, class constructors cannot.(虽然方法可以用可变长度参数列表声明,但是类构造函数不能。)
  • 解析:构造函数遵循与常规方法相同的规则,它们的参数列表是如何声明的,因此它们也可以支持可变长度参数列表。

结对与互评

点评

  • 博客中值得学习的或问题:两位同学的排版都非常精美,问题也非常详细且有自己的理解,可以说是非常认真了,相较之下我还差得比较多。
  • 代码中值得学习的或问题:commit的写法也特别值得借鉴,代码的逻辑性也很强。
  • 基于评分标准,我给谭鑫的博客打分:11分。得分情况如下:
    正确使用Markdown语法(加1分)
    模板中的要素齐全(加1分)
    代码Commit Message规范(加1分)
    排版精美(加1分)
    错题学习深入(加1分)
    点评认真,能指出博客和代码中的问题(加1分)
    问题5个(加5分)
  • 基于评分标准,我给方艺雯的博客打分:13分。得分情况如下:
    正确使用Markdown语法(加1分)
    模板中的要素齐全(加1分)
    问题9个(加9分)
    代码Commit Message规范(加1分)
    排版精美(加1分)

点评过的同学博客和代码

  • 本周结对学习情况
  • 20172305
  • 20172314
  • 结对学习内容
    - 第九章(继承)
    - 实验3-5

其他

本周课本上的内容并不是特别多,布置的作业也相对较易。但本章的定义其实不少,对于我这样对定义一点也不敏感的人而言,其实需要警觉。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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
  • 计划学习时间:20小时

  • 实际学习时间:25小时

参考资料

posted @ 2018-04-22 21:30  二许  阅读(240)  评论(5编辑  收藏  举报