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

读立写生 2018-04-22

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

教材学习内容总结

  1. 学习了如何去创建一个子类。
  2. 学习了使用protected修饰符让子类能够访问一个父类公共变量和使用保留字super来调用父类的构造方法。
  3. 学习了如何对父类的方法进行重写。
  4. 初步学习了类层次结构,了解了Object类和抽象类以及接口的层次结构。
  5. 学习了子类怎样通过一个其他方法来引用父类中的方法和变量以及常量。
  6. 初步学习了类间继承关系的设计。

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

  • 问题1:在学习接口的时候就有这样一个问题,接口和抽象类的区别和使用到底有什么不同。现在学习到了这一章,想要弄明白并在这里记录下来以便日后的复习。
  • 问题1解决方案:

    在语法方面:抽象类
    1.由abstract关键词修饰的类称之为抽象类。
    2.抽象类中没有实现的方法称之为抽象方法,也需要加关键字abstract。
    3.抽象类中也可以没有抽象方法,比如HttpServlet方法。
    4.抽象类中可以有已经实现的方法,可以定义成员变量。
    接口
    1.由interface关键词修饰的称之为接口;
    2.接口中可以定义成员变量,但是这些成员变量默认都是public static final的常量。
    3.接口中没有已经实现的方法,全部是抽象方法。
    4.一个类实现某一接口,必须实现接口中定义的所有方法。
    5.一个类可以实现多个接口。

  • 简单来说,接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。除此之外,还有设计层次上的区别,由于知识的欠缺,在这里尚未引用,在本博客的末尾附上链接便于以后的查看。
  • 问题2:在最开始看教材的时候,看到了这样的话:一般情况下,构造方法的第一行应该用super引用调用父类构造方法。如果不存在这样的调用,则java会自动在构造方法的最开始处产生一行super()调用。 并不理解这段话到底想要表达的是什么。
  • 问题2解决方案:在做练习的时候也遇到了这样的问题,在下面代码调试中的问题有所体现,在代码的编写和练习中也逐渐理解和体会。
  • 问题3:在刚开始学习的时候,我以为子类是可以直接调用父类中所有的方法和变量,后来才发现是不对的。在看例题9_12的时候更加肯定了我的想法。
  • 问题3解决方案:
  1. 关于私有成员变量
    无论父类中的成员变量是私有的、共有的、还是其它类型的,子类都会拥有父类中的这些成员变量。但是父类中的私有成员变量,无法在子类中直接访问,必须通过从父类中继承得到的protected、public方法(如getter、setter方法)来访问。
  2. 关于静态成员变量
    无论父类中的成员变量是静态的、还是非静态的,子类都会拥有父类中的这些成员变量。
  3. 关于被子类覆盖的成员变量
    无论父类中的成员变量是否被子类覆盖,子类都会拥有父类中的这些成员变量。

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

  • 问题1:在做课后习题9_1的时候,编译的时候无法通过,提示我需要标识符。
    20172313 2017-2018-2 《程序设计与数据结构》第七周学习总结

  • 问题1解决方案:我觉得应该是我这行代码的语法有问题,所以我又修改成了如下的格式。
    20172313 2017-2018-2 《程序设计与数据结构》第七周学习总结

  • 问题2:我当时对保留字super的理解还不到位,不理解要在子类的构造方法的第一行就要用super引用,再次对代码进行修改,果然就没有再出什么问题了。ヽ( ̄▽ ̄)ノ
  • 问题2解决方案:
    20172313 2017-2018-2 《程序设计与数据结构》第七周学习总结

代码托管

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

上周考试错题总结

  • 错题1: In Java, rrays are
    A . primitive data types
    B . objects
    C . interfaces
    D . primitive data types if the type stored in the array is a primitive data type and objects if the type stored in the array is an object
    E . Strings
  • 解析 在Java中,数组是作为对象实现的。 该变量是存储整个数组的内存块的引用变量。 但是,使用记号名称[index]而不是消息传递来访问数组。
  • 原因:这道题还是在学习的时候对数组的具体概念理解不清...
  • 错题2: If an int array is passed as a parameter to a method, which of the following would adequately define the parameter list for the method header?
    A . (int[ ])
    B . (int a[ ])
    C . (int[ ] a)
    D . (int a)
    E . (a[ ])
  • 解析 该参数的定义与变量最初声明的一样,类型参数名称。 这里的类型是int [],参数是a。
  • 原因:这道题是疏忽了,不小心就选错了。
  • 错题3: If a and b are both int arrays, then a = b; will
    A . create an alias
    B . copy all elements of b into a
    C . copy the 0th element of b into the 0th element of a
    D . return true if each corresponding element of b is equal to each corresponding element of a (that is, a[0] is equal to b[0], a[1] is equal to b[1] and so forth) and return false otherwise
    E . return true if a and b are aliases and return false otherwise
  • 解析 “=”是一个赋值运算符。 如果这两个变量都是基元,那么左边的变量会得到右边变量的副本(所以如果a和b是int值并且b = 5,那么a就变成5)。 但是,由于a和b是数组,所以引用变量a被设置为引用变量b,导致a和b引用内存中的同一个数组,或者它们现在是彼此的别名。
  • 原因:书本上的内容没有理解透彻。
  • 错题4: In Java, an array can only store one type of data. For instance, you cannot create an array that stores both double and String values.
    A . true
    B . false
    解析 数组被称为同类型。 这意味着存储在数组中的值的类型对于每个元素都必须是相同的。 该类型由声明决定。 所以,int [] x仅使x为int数组。 所以,没有数组可以存储double和字符串。
  • 原因:在学习教材时误把可变参数长度理解成可以同时储存不同类型的值了。
  • 错题5: Just as arrays can only have a fixed number of elements, set at the time the array is declared, a parameter list also can only have a fixed number of elements, set at the time the method is declared.
    A . true
    B . false
  • 解析 Java为可变长度参数列表提供了特殊符号。 省略号(...)用于指定可变长度参数列表。
  • **原因:可变长度参数理解混淆。

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • 排版精美,对于问题研究得很细致,解答也很周全。
  • 代码中值得学习的或问题:
    • 代码写的很规范,思路很清晰,继续加油!

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172332
    • 结对学习内容
      • 第9章 继承

其他

这周的内容从自身感觉来说并没有那么难,学习起来也没有前几周那样吃力,但由于这周还有实验课的缘故,所以学习任务并不算轻,好在学习起教材上的内容时没有出现什么麻烦,在进行代码调试的时候也没有出现什么大的问题。希望在以后的学习中继续努力,继续进步!

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周1261/120/20
第二周388/4661/215/35
第三周706/11621/317/52
第四周1104/22661/420/72
第五周1126/33921/515/87
第六周906/42981/620/107
第七周1233/55311/720/127
  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:
    相比于其他同学的学习状况来说,实在是感到自惭形秽,感到自己的学习力度还不够,希望在以后的学习生活中继续努力,多学Java,多敲代码,多学习,走向人生巅峰!

参考资料

  • 《Java程序设计与数据结构教程(第二版)》

  • 《Java——基础之继承与接口的区别》

相关推荐

80374192 / 0评论 2017-02-06
Mr丶Yang / 0评论 2016-11-04