20172332 2017-2018-2 《程序设计与数据结构》第六周学习总结
教材学习内容总结
第九章继承
- 1.创建子类。
- 子类与父类的关系。子类是父类的其中一种。
- 派生操作在子类中加保留字extends实现。
- 子类的实例化并不依赖于父类的实例化。
- 2.protected修饰符。(为了让子类能够访问并且不违反封装性原则)
- 父类中的变量和方法被声明为protected可见性时,子类就可以使用。
- UML图中,protected成员前加#。
- 父类的构造方法,子类不能继承(除非用super引用)。
- 3.super引用。
- super引用可以调用父类的构造方法。
- super引用调用父类构造方法的操作只能在子类中执行,并且必须是在第一行执行。
- 4.多继承。
- 单继承:子类只能有唯一的父类。
- java语言的设计者明确决定不支持多继承,以防出现父类的方法同名的情况。
- 作为替代多继承的方法,依赖接口。一个java类只能由一个父类派生,但可以实现多个接口。
- 5.子类和父类有相同的方法名和签名时,子类方法将重写父类方法,子类方法优先。
- 子类不能重写final方法。
- 6.影子变量。
- 子类父类变量名可以同名,这种定义是合法的,但是不提倡。
- 7.类层次结构。
- 从一个父类派生出的子类,还可以是它自己子类的父类。
- 多个子类可以从一个父类派生。
- 子类个数和类层次数都没有限制。
- 同一个父类的两个子类,称为同胞。两者没有继承关系。(可以理解为同胞兄弟,hhh。)
- 公共特征保持在尽可能高的类层次级上。
- 继承机制具有传递性。有可能子类的特性不是来自于父类,而是来自于父类的父类或者,父类的父类的父类等等。(也就是祖先类。)
- 情况不同,最佳的类层次结构不同,类层次结构不是一成不变的。
- 8.Object类。
- Java中所有的类归根结底都由Object类派生,如果没有extends,则默认从Object类派生。
- Java成粗的每一个类都继承toString方法和equals方法。
- 9.抽象类和抽象方法。
- 抽象类通常含一个或多个尚未定义的抽象方法,不能被实例化。
- 抽象类与接口的不同是:①抽象类可以含有非抽象方法。②除了常量之外还可以声明数据。
- 用abstract修饰符将一个类声明为抽象类。
- 抽象类在类层次结构中充当占位符。
- 抽象类中的每一个抽象方法都必须使用abstract修饰符,但抽象类不必一定包括抽象方法。
- 在UML类图中,抽象类的类名用斜体表示。
- 抽象类在类层次上的定义位置不受限制,但一般在较高的类层次上。(存在从非抽象父类派生出抽象类的可能)
- 由抽象类派生的子类必须重写所有父类的抽象方法,否则该子类仍未抽象方法。
- 抽象方法不使用final和static修饰符。
- 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中,抽象类可以不含抽象方法吗
代码调试中的问题和解决过程
- 问题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:然而。
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:数组列表的前部。
点评模板:
-
博客中值得学习的或问题:
-
代码中值得学习的或问题:
点评过的同学博客和代码
- 本周结对学习情况
- 20172326
- 结对学习内容
- 第九章继承
- 上周博客互评情况
其他(感悟、思考等,可选)
- 本周的pp作业是要求画UML类图,这是第一次画UML类图,纪念一下第一幅UML类图(虽然看起来很简单!)
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 | |
第七周 | 247/4742 | 1/8 | 14/122 |
- 计划学习时间:20小时
- 实际学习时间:14小时
- 改进情况:这周还有一个实验,此博客交时,还没有开始学习实验三实验四与实验五,因此博客篇中并没有算实验的博客,学习时间也没有加学习实验的时间。因为本周的继承,不难理解,并且没有很多的代码需要敲。所以花费的时间较少,代码的增加量也较少。
参考资料
原文地址:https://www.cnblogs.com/yu757503836/p/8867480.html
时间: 2024-11-03 17:50:43