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

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

教材学习内容总结

第九章继承

  • 1.创建子类。
    • 子类与父类的关系。子类是父类的其中一种。
    • 派生操作在子类中加保留字extends实现。
    • 子类的实例化并不依赖于父类的实例化。
  • 2.protected修饰符。(为了让子类能够访问并且不违反封装性原则)
    • 父类中的变量和方法被声明为protected可见性时,子类就可以使用。
    • UML图中,protected成员前加#。
    • 父类的构造方法,子类不能继承(除非用super引用)。
  • 3.super引用。
    • super引用可以调用父类的构造方法。
    • super引用调用父类构造方法的操作只能在子类中执行,并且必须是在第一行执行。
    • 父类构造函数有参数,子类中一定要用super引用,父类构造函数无参数,则super()引用可有可无。
  • 4.多继承。
    • 单继承:子类只能有唯一的父类。
    • java语言的设计者明确决定不支持多继承,以防出现父类的方法同名的情况。
    • 作为替代多继承的方法,依赖接口。一个java类只能由一个父类派生,但可以实现多个接口。
  • 5.子类和父类有相同的方法名和签名时,子类方法将重写父类方法,子类方法优先。
    • 子类不能重写final方法。
  • 6.影子变量。
    • 子类父类变量名可以同名,这种定义是合法的,但是不提倡。
  • 7.类层次结构。
    • 从一个父类派生出的子类,还可以是它自己子类的父类。
    • 多个子类可以从一个父类派生。
    • 子类个数和类层次数都没有限制。
    • 同一个父类的两个子类,称为同胞。两者没有继承关系。(可以理解为同胞兄弟,hhh。)
    • 公共特征保持在尽可能高的类层次级上。
    • 继承机制具有传递性。有可能子类的特性不是来自于父类,而是来自于父类的父类或者,父类的父类的父类等等。(也就是祖先类。)
    • 情况不同,最佳的类层次结构不同,类层次结构不是一成不变的。
  • 8.Object类。
    • Java中所有的类归根结底都由Object类派生,如果没有extends,则默认从Object类派生。
    • Java中的每一个类都继承toString方法和equals方法。
  • 9.抽象类和抽象方法。
    • 抽象类通常含一个或多个尚未定义的抽象方法,不能被实例化。
    • 抽象类与接口的不同是:①抽象类可以含有非抽象方法。②除了常量之外还可以声明数据。
    • abstract修饰符将一个类声明为抽象类。
    • 抽象类在类层次结构中充当占位符。
    • 抽象类中的每一个抽象方法都必须使用abstract修饰符,但抽象类不必一定包括抽象方法。
    • 在UML类图中,抽象类的类名用斜体表示。
    • 抽象类在类层次上的定义位置不受限制,但一般在较高的类层次上。(存在从非抽象父类派生出抽象类的可能)
    • 由抽象类派生的子类必须重写所有父类的抽象方法,否则该子类仍未抽象方法。
    • 抽象方法不使用finalstatic修饰符。
  • 10.接口层次结构。
    • UML类图中,用空心箭头线表示接口之间的继承关系。
    • 父接口用于派生子接口时,子接口继承了父接口的所有抽象方法和常量,任何实现子接口的类都必须实现所有的抽象方法。
    • 接口间的继承问题不存在可见性问题,因为一个接口的所有成员都是公共的。
    • 接口不能用于派生新类,类不能用于派生接口。(接口只能实现)。
  • 11.可见性。
    • 在子类中,即使不能直接引用父类成员,但是父类成员也总是存在的,可以被间接地引用。
  • 12.类间继承关系的设计。
    • 继承关系小结。
    • final修饰符可用于限制继承。
    • final修饰符可用于方法也可用于类。(方法不能在任何派生类中重写,类不能成为其他类的父类。)

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

  • 问题1:三种可见性修饰符的可见性比较
  • 问题1解决方案:private可见性最严格,public可见性最弱,protected可见性位于两者之间。
  • 问题2:super.message();super(message);的不同
  • 问题2解决方案:super.message()是调用父类的方法并且这里的message是方法名,super(message)是调用父类的构造方法并且这里的message是形参名。
  • 问题3:书中所说的抽象类通常含一个或多个尚未定义(没有实现代码)的抽象方法抽象类不必一定包含抽象方法是否相矛盾。
  • 问题3解决方案:不矛盾。详情见Java中,抽象类可以不含抽象方法吗
  • 问题4:接口类与抽象类。
  • 问题4解决方案:

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

  • 问题1:出现红线的原因

  • 问题1解决方案:该类是子类,如果子类创建构造方法的话,那么需要用super语句把父类的构建方法也输入,(主要是把父类的对象也初始化),否则会有错误。并且一定要注意,super语句要放在第一行。

代码托管

上周考试错题总结

1.The "off-by-one" error associated with arrays arises because

  • A . the first array index is 0 and programmers may start at index 1, or may use a loop that goes one index too far
  • B . the last array index is at length + 1 and loops may only iterate to length, missing one
  • C . the last array element ends at length - 1 and loops may go one too far
  • D . programmers write a loop that goes from 0 to length - 1 whereas the array actually goes from 1 to length
  • E . none of the above, the "off-by-one" error has nothing to do with arrays
  • 答案:A ;我选的:D
  • 分析:数组的合法索引为0到X- 1,差一错误,因为程序员将编写代码来尝试访问索引1到X
  • 单词:1.array:数组。2.iterate:重复。3.element:元素。4.whereas:然而。5."off-by-one" error:差一错误

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[ ])
  • 答案:C ;我选的:E
  • 分析:这题意思是定义一个整型值数组,应该怎么声明。所以选C。
  • 单词:1.parameter:参数。

3.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
  • 分析:声明方式有四种模式:①int[] a,b ②int[] a ③int d[] ④int c,d[]
  • 单词:无

4.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如果是两个变量,则把右边变量的值赋给左边变量。②a和b如果是两个数组,导致a和b都在存储器中引用相同的数组,因此它们现在是彼此的别名。
  • 单词:1.alias:别名。2.corresponding:对应的。

5.Arrays have a built in toString method that returns all of the elements in the array as one String with "\n" inserted between each element.

  • A . true
  • B . false
  • 答案:B ;我选的:A
  • 分析:数组是对象,因此它们是从Object类继承的。Object类有一个toString方法。但是,Object类的toString方法不返回存储在对象中的值,而是返回引用变量的值。因此,数组上使用的toString将不会返回数组中存储的值,而是返回一个无意义的字符集。(Object类在第九章的继承中有提到。)
  • 单词:1.insert:插入。

6.So long as one is only accessing the elements of an ArrayList, its efficiency is about the same as that of an array. It's only when one begins to insert or remove elements towards the front portion of an ArrayList that its efficiency deteriorates.

  • A . true
  • B . false
  • 答案:A ;我选的:B
  • 分析:只要一个只访问数组的元素,效率就与数组相同。但是,当对数组列表的前面部分进行插入或删除时,也就是当大量元素复制必须发生时,降低其效率。
  • 单词:1.the front portion of an ArrayList:数组列表的前部。

点评模板:

  • 博客中值得学习的或问题:
    • 20172313此博客排版精美,学习联系之前的内容。
    • 20172326此博客对于问题的解决过程记录的非常详细,把每一步的记录的很详细。
  • 代码中值得学习的或问题:
    • 20172313此博客代码部分的截图太大了,其实没有必要,只需要截代码部分的和运行结果的就好。
    • 20172326此博客的关于教材的内容总结稍微有点少,不是很全面。

点评过的同学博客和代码

其他(感悟、思考等,可选)

  • 这周的继承感觉不是很难理解,所以课后的pp自认为做的很顺利!所以代码调试过程中基本没什么问题。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 182/182 1/1 10/10
第二周 458/640 1/2 15/25
第三周 469/1109 2/4 18/43 学会IDEA的使用和调试,学会jdb调试。
第四周 1536/2645 1/5 24/67
第五周 980/3625 1/6 25/92
第六周 870/4495 1/7 16/108
第七周 455/4950 2/9 22/130
  • 计划学习时间:20小时

  • 实际学习时间:22小时

  • 改进情况:这周有一个实验,实际在书本上的内容花费时间并不是很多,时间主要都花在实验上了。

参考资料

posted @ 2018-04-20 20:12  雲深不知处  阅读(313)  评论(12编辑  收藏  举报