20172318 2017-2018-2 《程序设计与数据结构》第7周学习总结
教材学习内容总结
- 继承:继承就是从现有类派生新类的过程。继承的目的之一:复用现有软件。继承在父类和子类之间建立一种“是”关系
- protected修饰符:子类可以引用被声明为protected的父类的变量或方法,并且使父类保持了一定的封装性。protected可见性提供了允许继承的最大可能的封装性。
- super引用:Super的用处之一就是调用父类的构造方法,也可用于引用父类的其他变量及方法
- 多继承:Java的继承方法为单继承,即子类只能有唯一父类。一些面向对象语言允许子类有多个父类,这种方法称为多继承
- 重写方法:当子类和父类有相同的方法名和签名时,子类方法将重写父类方法,子类方法优先,方法重写在体现多态性时显得更为重要
- 影子变量:当子类和父类有相同的变量名时,子类变量将重写父类变量,子类变量优先。如果在子类中声明一个同名变量,则该变量称为影子变量。
- 类层次结构:一个类的子类可以是一个或多个其他类的父类,由此建立起类层次结构,应合理将类的公共特征保持在尽可能高的类层级上
- Object类:如果一个类的定义中没有用extends从另一个类派生,则会自动从Object类派生。所有的类都直接或间接地由Object类派生。Java程序的每一个类都继承toString方法和equals方法
- 抽象类:可用abstract修饰符将一个类声明为抽象类。抽象类通常还有一个或多个尚未定义的抽象方法,不能被实例化,UML图中类名使用斜体表示。由抽象类派生的子类必须重写所有父类的抽象方法,否则该子类仍然是抽象类
- 接口层次结构:当一个父接口用于派生子接口时,子接口就继承了父接口的所有抽象方法和常量,任何实现子接口的类都必须实现所有的抽象方法
- 可见性:父类的私有成员也被子类继承,虽不能以成员名直接访问这些私有成员,但可以间接地访问
- 继承的限制:final修饰符可用于限制继承
教材学习中的问题和解决过程
- 问题1:super引用方法
- 问题1解决方案:在方法里用super.XXX(XXX为方法名)
- 问题2:toString和equals
- 问题2解决方案:学了这章之后终于明白了为什么toString用于返回该对象的字符串表示,equals用于判定是否相等了,因为所有的类都源于Object方法,该方法含有toString和equals方法
代码调试中的问题和解决过程
- 问题1:在做实验时对使用TDD进行实验2内容有些看不懂
- 问题1解决方案:教程写了很多,但实验2第一部分中教程要建立个空类
然后去测试方法,嗯.....后来发现要用前面的
public class MyUtil{
public static String percentage2fivegrade(int grade){
//如果成绩小于0,转成“错误”
if ((grade < 0))
return "错误";
//如果成绩小于60,转成“不及格”
else if (grade < 60)
return "不及格";
//如果成绩在60与70之间,转成“及格”
else if (grade < 70)
return "及格";
//如果成绩在70与80之间,转成“中等”
else if (grade < 80)
return "中等";
//如果成绩在80与90之间,转成“良好”
else if (grade < 90)
return "良好";
//如果成绩在90与100之间,转成“优秀”
else if (grade < 100)
return "优秀";
//如果成绩大于100,转成“错误”
else
return "错误";
}
}
编写MyUtil才能顺利进行
- 问题2:assertEquals?
- 问题2解决方案:assertEquals(,)测试括号左边(期望)与右边的结果是否相等,达到测试目的
- 问题3:实验2第五部分UML图
- 问题3解决方案:一点一点的摸索啊,文件在群里没人吭声,安装完了打开全是英文很懵逼啊,我还误解了题意,以为是用之前的类去做UML图
于是我上传了这个
嗯9.3的,我舍友说不对,你得自己去画(吃鲸),距离提交只剩一分钟的时候我勉强画出了这个
完整版的是这个
不过没传上去
代码托管
因为使用idea上传,虚拟机上的commit有缺失
上周考试错题总结
- 错题1及原因,理解情况
If int[ ] x = new int[15]; and the statement x[-1] = 0; is executed, then which of the following Exceptions is thrown?
A . IndexOutOfBoundsException
B . ArrayIndexOutOfBoundsException
C . NegativeArraySizeException
D . NullPointException
E . ArithmeticException
选B,原来选了A,没发生过错误所以不清楚会怎么表示 - 错题2及原因,理解情况
Assume that BankAccount is a predefined class and that the declaration BankAccount[ ] firstEmpireBank; has already been performed. Then the following instruction reserves memory space for
firstEmpireBank = new BankAccount[1000];
A . a reference variable to the memory that stores all 1000 BankAccount entries
B . 1000 reference variables, each of which point to a single BankAccount entry
C . a single BankAccount entry
D . 1000 BankAccount entries
E . 1000 reference variables and 1000 BankAccount entries
选B,每一个BankAccount都是一个参考变量 - 错题3及原因,理解情况
Arrays have a built in toString method that returns all of the elements in the array as one String with " " inserted between each element.
A . true
B . false
选B,虽然有个toString方法,但不会返回储存在每个对象中的值,会返回一些无意义的字符 - 错题4及原因,理解情况
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,在前部分插入或移除元素会发生大量的元素复制,降低效率
点评模板:
- 博客中值得学习的或问题:
- 对教材内容解析的非常到位
- 代码中值得学习的或问题:
- UML会画不会导入的我还得好好学习学习
点评过的同学博客和代码
其他(感悟、思考等,可选)
课本简单实验难
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 128/128 | 1/1 | 12/12 | |
第二周 | 212/340 | 1/2 | 18/30 | |
第三周 | 206/546 | 1/3 | 20/50 | |
第四周 | 483/1029 | 2/5 | 40/90 | |
第五周 | 633/1662 | 1/6 | 30/120 | |
第六周 | 560/2222 | 1/7 | 20/140 | |
第七周 | 511/2733 | 1/8 | 20/160 |