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

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

教材学习内容总结

第九章 继承
一、创建子类
1、继承:它是从现有类派生出新类的过程,并且是一种强有力的软件开发技术,他是面向对象的编程的显著特征。
2、通过继承,新类自动包含了原始类的变量和方法,然后程序员可以将新变量和方法添加到派生的新类,或者修改所继承的方法和变量。
3、特点:通过继承创建新类比重新鞋类更快捷、更容易且成本更低。继承是支持软件复用的途径之一。
4、用于派生类的成为父类、超类或基类,被派生出的类称为子类或亚类。Java用保留字extends指明新类有现有类派生。
5、protected修饰符:当一个变量或方法声明为protected可见性时,子类就可以引用它,并且父类保持了一定的封装性。
6、super引用:在一个类中可以使用保留字super引用父类,即使用super引用可以访问父类的成员;构造方法的第一行应该用super引用调用父类构造方法。
7、多继承:Java的继承方法叫做单继承,即子类只能有唯一的父类。

二、重写方法
1、当子类和父类有相同方法名和签名,子类方法将重写父类方法,子类方法优先。
2、类层次结构:从一个父类派生出的子类,还可以是它自己的子类,并且可以多个子类可以从一个父类派生。
3、抽象类:抽象类在类层次结构中充当占位符,注:对一个抽象方法使用final或static修饰符将产生矛盾。

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

  • 问题1:书中讲到

一般而言,继承更加快捷。

但是有没有特别的时候呢?

  • 问题1解决方案:在查找资料后,发现了这样一篇文章,说在Java里继承是有害的,

Jams Gosling(Java之父)做发起人讲话的时候在被问到:“如果你重新构造Java,你想改变什么?”的时候,说到:“我想抛弃classes”,他这样解释:“真正的问题不是由于class本身,而是实现继承(extends 关系)。接口继承(implements关系)是更好的。你应该尽可能的避免实现继承。”

  • 问题2:软件复用是什么?

  • 问题2解决方案:软件复用是使用现有软件组件实现或更新软件系统的过程。
    它可以降低成本和开发时间,产生可靠的软件实现标准化,在不同应用中保持一致 。

  • 问题3:抽象类与接口的区别?

  • 问题3解决方案:
    书中讲:

在抽象类中,每一个抽象方法都必须使用abstract修饰符,但抽象类不必一定包含抽象方法。

注:有抽象类派生的子类必须重写所有父类的抽象方法,否则该子类仍然是抽象类。
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

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

  • 问题1:一开始不知道super怎么用,总是调用不对对象或者是方法。

  • 问题1解决方案:发现我将继承和super调用弄混了,继承可以直接使用父类变量或者方法,我还在那里使劲用super调用。

  • 问题2:为什么抽象类被子类继承以后,在驱动中输入System.out.println(....)调用方法显示出错?

但是当我直接提取方法的时候就可以:

  • 问题2解决方案:
    于是先是问同学,他们说是书上这样写的,也不知道为什么,
    后来我发现,在子类中,输出的语句本身就是通过 System.out.println(....)定义的,所以我觉得在System.out.println()语句中不能再生成一个System.out.println();只能这样理解了,因为其他也说不清啊

代码托管

上周考试错题总结

  • 错题1
    In Java, arrays 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

      正确答案: B 我的答案: D 
    

解析:在Java中,数组是作为对象实现的。该变量是存储整个数组的内存块的引用变量。但是,使用记号名称[index]而不是消息传递来访问数组。

原因:因为数组的运用和原始数据类型比较像,而且定义的时候也用到了,所以没有分清。

  • 错题2
    Given the following declarations, which of the following variables are arrays?
    int [ ] a, b;
    int c, d [ ];
    A. a
    B. a and b
    C. a and d
    D. a, b and d
    E. a, b, c and d

      正确答案: D 我的答案: C 
    

解析:第一个声明声明a和b都是int数组。第二个声明声明c和d是整数,但是在d的情况下是一个int数组。所以,a,b和d都是int数组。

原因:数组的定义,我本人为用逗号分开就代表已经分为定义两个部分,感觉自己傻,好傻

  • 错题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 
    

解析:“=”是一个赋值运算符。如果这两个变量都是基元,那么左边的变量会得到右边变量的副本(所以如果a和b是int值并且b = 5,那么a就变成5)。但是,由于a和b是数组,所以引用变量a被设置为引用变量b,导致a和b引用内存中的同一个数组,或者它们现在是彼此的别名。

原因:这个当时查了资料,也做了相关的实验,只发现了结构,没有特别在意别名的改变。

  • 错题4
    A Java main method uses the parameter (String [ ] variable) so that a user can run the program and supply "command-line" parameters. Since the parameter is a String array, however, the user does not have to supply any parameters.
    A. true
    B. false

      正确答案: A 我的答案: B 
    

解析:主要方法需要参数,以防程序员希望允许用户提供命令行参数。然后,将在命令行输入的任何内容作为命令行参数接受。如果它是由空格分隔的几个单词,那么每个单词存储为一个单独的字符串数组元素。例如,“java foo.class hi there”会将变量[0]中的“hi”和变量[1]中的“there”存储起来以供程序使用。

原因:我认为还要加上什么-t呀之类的参数。

  • 错题5
    If the following statement is performed: CD [ ] my collection = new CD [200]; where CD is a previously defined class, then my collection [5] is a CD object.
    A. true
    B. false

      正确答案: A 我的答案: B 
    

解析:变量mycollection被声明为一个CD对象数组,因此mycollection [5]是数组中的第6张CD,由于CD是一个对象,mycollection [5]是一个CD对象。

原因:他们之间的从属关系,没有搞得太明白。

  • 错题6
    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

      正确答案: A 我的答案: B 
    

解析:数组被称为同类型。这意味着存储在数组中的值的类型对于每个元素都必须是相同的。该类型由声明决定。所以,int [] x仅使x为int数组。所以,没有数组可以存储双打和字符串。

原因:解析里只是表面int型,假如就和书中例题一样是object呢?不理解.......

  • 错题7
    A ragged array is a multidimensional array whose initial indices don't all start at zero.
    A. true
    B. false

      正确答案: B 我的答案: A
    

解析:长度并不相等。Java中所有数组的初始索引必须从零开始。

原因:书中也好像写过可以不从0开始,那个ragged没有理解这个数组是个啥??

点评过的同学博客和代码

  • 本周结对学习情况
  • 博客中值得学习的或问题:
    • 善于思考,勤于看书,可以在书中抠细节,把细节问题放大,解决起来更加方便。
    • 代码中值得学习的或问题:
    • 注释敲的很棒,可以让别人清楚明白这里到底是在做什么。
  • 基于评分标准,我给本博客打分:11分。得分情况如下:
  1. 正确使用Markdown语法(加1分):
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分
  5. 本周有效代码超过300行(加2分)
  6. 其他加分:
    1). 代码Commit Message规范的加1分
    2). 感想,体会不大空的加1分
  • 本周结对学习情况
  • 博客中值得学习的或问题:
    • 内容详略得当;
    • 代码调试环节比较详细;
  • 基于评分标准,我给本博客打分:4分。得分情况如下:
  1. 正确使用Markdown语法(加1分):
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分

其他

这一周学习内容相比于上周稍微轻一点,但是中途又添加的实验学习,又需要我们花费不少时间去和我们最最亲爱的Java打交道了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 156/156 1/1 15/15
第二周 217/371 1/2 20/35
第三周 233/604 2/4 20/55
第四周 1382/1986 1/5 35/90
第五周 146/2196 1/6 25/115
第六周 462/2658 1/7 15/130
第七周 856/3514 1/8 20/150

参考资料

Java程序设计
蓝墨云
软件复用的几种方式
为什么说Java继承是有害的
Java抽象类和接口的区别

原文地址:https://www.cnblogs.com/qh45wangwenbin/p/8894223.html