20172303 2017-2018-2 《程序设计与数据结构》第7周学习总结
20172303 2017-2018-2 《程序设计与数据结构》第7周学习总结
教材学习内容总结
1.继承
- 继承的过程是在两个类之间建立一种“是”的关系,即子类是一种更具体的父类版本。
- 父类用于派生新类,又称为超类或基类。被派生出来的类称为子类或亚类。
- Java中使用
extends
进行派生- 格式:
public class 子类 extends 父类{}
- 格式:
- 继承具有单向性。
- 在UML类图中,由子类指向父类的空心箭头代表继承关系。
- final修饰符可用于限制继承的能力。
- protect修饰符
- protect修饰符的作用是既能保证子类可以引用父类的方法或变量,又能保证父类的封装性。
- 格式:
protect int num1;
- 在UML图中,pritect成员前加#来表示protect可见性
- super引用
- 由于构造函数不能继承,当子类想要引用父类的构造方法时,就需要super引用。
- 格式:
- 引用构造函数:
super(变量)
- 引用方法/实例数据:
super.方法/实例数据
- 引用构造函数:
- 有些对象语言允许子类有多个父类,这种情况成为多继承。
2.重写方法
- 当子类和父类的方法名出现相同情况时,子类将重写父类的方法。但子类不能重写final方法。
3.类层次结构
- 一个子类可以是一个或多个其他类的父类,从而可以建立起类层次结构。继承机制具有传递性。
- Object类
- 所有java类都直接或间接地由Object类派生,可以说,Object类是所有类的父类。
- 其中最常用的两个方法是toString方法和equals方法,经常被子类重写。
- 抽象类
- 抽象类不能被实例化,在类层次结构中充当占位符。
- 可用abstract修饰符将一个类声明为抽象类。
- 在UML类图中,用斜体表示抽象类。
- 不能对一个抽象方法使用final或者static修饰符。
- 抽象类不必一定包含抽象方法。
教材学习中的问题和解决过程
- 问题1:Words/Book/Dictionary类和Words2/Book2/Dictionary2类的区别?
- 问题1解决方案:两个实现的功能是一样的,所以刚开始不是很明白为什么要用两种不同的代码。重新把两个对着看了一遍,首先两边的main驱动类是没有差别的,Book类中页数是直接定义了pages变量的值,而Book2类中是通过一个构造方法来设计pages变量的值。所以Dictionary类中直接引用父类就可以了,而Dictionary2类要通过super引用来引用父类的构造方法。
- 问题2:Java修饰符的类型和区别?
- 问题2解决方案:主要分为可见性和非可见性修饰符(又称访问修饰符和非访问修饰符)
- 可见性修饰符分为四种:
- public:被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。由于类的继承性,类所有的公有方法和变量都能被其子类继承。
- private:私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。
- protected:当父类和子类在同一个包中时,被声明为 protected 的变量、方法能被同一个包中的任何其他类访问;当父类和子类不在同一个包中时,子类实例可以访问其从父类继承而来的 protected 方法,而不能访问父类实例的protected方法。
- default:在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- 非可见性修饰符已学的有三种:
- static:用于声明静态变量或静态方法。
- final:final 变量能被显式地初始化并且只能初始化一次。类中的 final 方法可以被子类继承,但是不能被子类修改。
- abstract:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充
- 可见性修饰符分为四种:
- 问题3:不是很能理解P299的“每一次的派生都应该具有一种‘是’关系,子类是一种更具体的父类版本。”的含义。
- 问题3解决方法:询问了于欣月同学,她举了一个非常形象的例子,比如说有一个马类和一个哺乳动物类,你可以很明确地说出“马是哺乳动物”这样一种“是”的关系,所以可以说哺乳动物类是马类的父类。
代码调试中的问题和解决过程
- 问题1:做PP9.1时输出结果一直是一个结果
- 问题1解决方案:再次询问了于欣月同学,把
MonetaryCoin a = new MonetaryCoin();
放到了while循环中。
修改前:
修改后:
修改后正确运行结果:
原因见下图:
代码托管
- 本周代码量出现问题(╥╯^╰╥)周一去找王老师看了一下,老师说脚本之类的都没问题,应该是有什么文件丢失了,不影响课程进度的话就不用管了,就按着现在的代码量往上增吧
上周考试错题总结(正确为绿色,错误为红色)
- 错题1: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
- 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
- 原因及理解情况:做的时候没有搞清楚"alias"的意思,之后查了才反应过来是别名,当时觉得“=”是用来赋值的,a = b应该就是把b赋值给a,但由于a和b是数组,所以他们现在引用同一个数组,成了相互的别名。
- 错题2: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
- 原因及理解情况:刚开始看解析不理解为什么数组从Object类继承,看了第九章知道了因为它是所有类的父类。Object类有一个toString方法。但是,Object的toString方法不返回存储在Object中的值,而是返回参考变量的值。所以,在数组上使用的toString不会返回数组中存储的值,而是返回一组没有意义的字符。
- 错题3A 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
- 原因及理解情况:main方法需要提供参数。例如老师上课举得一个例子:
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 优点:教材内容学习相比上周有改进,感觉开始认真看教材了。适当的一些表情确实能增加博客的可读性。
- 问题:张昊然同学说自己本周问题不多,但我觉得是否有可能是在看教材时还是不够深入,没有多考虑一些问题,只是泛泛地把课本看过去了。
- 代码中值得学习的或问题:
- 优点:在本周有实验课后把代码分开文件夹放,更加简洁整齐,是我应该学习的。
- 问题:commit提交可以再简洁并且具体一些。
点评过的同学博客和代码
- 本周结对学习情况
- 20172322
- 结对学习内容
- 张昊然同学教会了我如何画UML类图并帮助我完成了实验2的节点四。
- 讨论PP9.1,两人都出现了最后输出结果不变的问题,最后通过询问别组的于欣月同学解决的。
其他(感悟、思考等,可选)
- 这周的内容相比前几周要简单许多,感觉能稍微放松一点点。这周在写博客的时候最大的感触就是你学的东西多了,就有很多可以类比总结的概念,就像初高中历史老师按时间顺序讲完知识后,会在期末时按不同的专题进行讲解,这样就能综合一学期所学的全部内容。我希望在接下来的每一次博客中我都能总结点什么东西。
- 教材复习情况
- 复习进度(页数):71/310
- 重要成长:
- 复习了四种整形和两种浮点型。Java中默认所有整型值为int型,最后加L或l才是long型。
- 复习了ASCII码和Unicode码的差别。
- 之前一直不知道怎么写的布尔变量类会写了(〃'▽'〃)
- 在P56的Scanner类方法中找到了之前一直搞不清
hasNext
方法是干嘛的
- 感想:这周复习的页数不是很多,但感觉收获很大,觉得java的知识体系渐渐清晰了。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 120/120 | 1/1 | 9/9 | |
第二周 | 246/366 | 1/2 | 9/18 | |
第三周 | 785/1121 | 2/4 | 15/33 | |
第四周 | 615/1736 | 1/5 | 20/53 | |
第五周 | 1409/2645 | 1/6 | 24/77 | |
第六周 | 561/3206 | 1/7 | 20/97 | 再次搞清了一些自己有点含糊不清的概念 |
第七周 | 63/3269 | 1/8 | 15/112 |
- 计划学习时间:15小时
- 实际学习时间:15小时
- 改进情况:本周学习内容不是很难,再加上其他科目事情比较多,分给java的时间可能有点少,下周会改进。