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.(虽然方法可以用可变长度参数列表声明,但是类构造函数不能。)
  • 解析:构造函数遵循与常规方法相同的规则,它们的参数列表是如何声明的,因此它们也可以支持可变长度参数列表。

其他

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

学习进度条

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

猜你喜欢

转载自www.cnblogs.com/Lewandodoski/p/8909068.html