学号 2017-2018-20172309 《程序设计与数据结构》第8周学习总结
学号 2017-2018-20172309 《程序设计与数据结构》第8周学习总结
教材学习内容总结
- 后绑定。
- 在程序执行的某个时刻可能会产生一个请求事件,要求执行某段代码来完成一个方法的调用,这种请求事件称为一个方法调用与一个方法定义的绑定。
- 一般情况下这种绑定发生在编译阶段,但对于多态性引用,这种绑定要延迟到程序运行时才能执行,并且要绑定的方法定义取决于当时引用变量所引用的对象。
- 多态性引用能够随时随时间变化指向不同类型的对象。
- 在Java中,多态性的引用可以用两种方式:继承方式、接口方式。 - 在继承中实现多态性:
- 举个例子吧:
父类: Animal 方法: sleep()、 eat(). 子类: Cow 方法: 1. sleep() System.out.println("牛在睡觉“”); 2. eat() System.out.println("牛在吃草”); 子类:Sheep 方法: 1.sleep() System.out.println("羊在睡觉”); 2. eat() System.out.println("羊在吃草”); 为了显示多态性,我们可以这样产生对象 : Animal function = new Cow(); Animal function = new Sheep(); 当使用 function.sleep(); function.eat();时 结果为: 牛在睡觉 羊在睡觉 牛在吃草 羊在吃草
- 在Java中,用父类声明的一个引用变量可以指向一个子类对象。如果两个类具有两个相同签名的方法,则这个父类的引用就具有多态性。
- 在接口中实现多态性:
- 要点:接口产生的多态是指不同类在实现同一个接口的时候有不同的实现方式,那么接口变量在回调接口方法时就可以产生多种形态。
- 自己简单理解:对外提供的都是接口。
- 接口的思想:例如笔记本电脑与USB接口。
1. 接口的出现扩展了功能 .
2. 接口其实就是暴露出来的规则 .
3. 接口的出现降低了耦合性,解耦. - 知识点:
1. 接口名可以用于声明对象引用变量。
2. 一个接口引用变量可以指向实现该接口的任何类的任何对象。
3. 方法的参数是可以多态性的,使得方法所接受的参数具有灵活性。
- 排序:
- 排序分为选择法排序和插入法排序。
- 要点:以多态性方式实现的排序算法可以对任何一组可比较的对象进行排序。
- 选择排序法:相继的将各值放在自己最终的位置。
- 插入排序法:不断地将一个新元素插入到已排好序的数列子集中。
- 排序算法的比较:选择算法时有各种的性能指标,包括算法的建议性、效率及储存空间需求量。
- 搜索:
- 搜索分为线性搜索和二分搜索。
- 线性搜索:将一个目标一次对每一个元素进行比较,最终找到目标元素。
- 二分搜索:每次搜索都能排除1/2的选项,直到搜索中最终的目标元素。
- 搜索算法的比较:算法的选择取决于具体的条件:虽然二分搜索的效率明显高于线性搜索,但二分搜索的要求是已经经过排序。
教材学习中的问题和解决过程
- 问题1:接口在多态中实现应该怎么用?
- 问题1解决方案:就拿PP10.1举例吧:
- 首先给有个接口,接口的格式为
因此在PP10.1中应该为 - 应该运用接口:
值得注意的是*8应该实现接口中所有的方法**
- 问题2:在进行排序时,如果是一组int型数据我能够理解,但是像对于例子中的对姓名进行排序应该怎么理解呢?
- 问题2解决方案:
- 问题3:排序算法的比较、搜索算法的比较,比较的是什么,比较的目的是什么?
-解决方案: - 比较内容:
- 是稳定性,所谓稳定性,是指值相等的两个元素在排序前后是否会发生位置的交换。如果不会发生交换,则认为是稳定的算法;反之,则认为是不稳定的排序算法。
- 是时间复杂度,指执行算法所需的时间长短。简单说就是算法执行的快慢程序。
- 是空间复杂度,指执行算法所占用的内存大小。
- 排序算法的比较:
- 一般来说最简单的算法常常是效率最低的算法。因为要想算法简单,就得使用循环,使用循环就是进行大量的重复的、一次次进行比较的算法,因此繁琐。
个人理解 - 效率高不一定算法简单。
- 选择排序和插入排序都有等同的效率,都是n^2阶算法。
- 效率相同时,还有另外一些东西需要考虑,比如选择排序法更易理解,所执行的交换操作更少等。
- 搜索算法的比较:
- 不一定是一定需要选择效率高的算法,算法的选择取决具体的条件。
- 无疑,二分搜索比线性搜索的效率高,但是二分搜索需要对数据进行排序。而线性搜索的实现相当简单。
代码调试中的问题和解决过程
- 问题1:PP10.1 要求是用Payable实现多态性。但是因为对接口的不了解,所以无从下手,但是经过看书、请教同学对接口有了大概的理解。
- 问题1解决方案:
代码:
接口Payable
Staff员工信息
main函数 - 问题2:PP10.5 修改Movies程序,将储存的DVD按名字排序。出现这个问题
它的提示是说接口里的方法没有实现,但是我实现了comparable接口中的compareTo()方法, - 问题2解决方案:这里需要实现public int compareTo(Object obj)方法其中 我参数没使用正确:
正确应该为
代码:
DVD1
Movies
DVDCollection
代码托管
上周考试错题总结
- 错题1:
- 现在理解:指令超级代表了当前类父类中的某些东西的调用。由于没有消息,而仅仅是super(),所以它是父类构造器的调用。
- 错题2:
- 现在理解:Java支持继承,但不是多重继承,所以Java类可以有任意数量的子节点,但只有一个父节点。而且,由于所有Java类都直接或间接地从对象类继承,所以所有Java类都有一个双亲类。
- 错题3:
- 现在理解:多态的术语表示变量可以有多种形式。在一般情况下,Java被强烈定义为,一个变量,一旦声明为类型,就永远不能改变为不同的类型。唯一的例外是多态变量可以是任何类型的派生类(尽管不是在同一时间,变量可以从一种类型转换为另一种类型)。
- 错题4:
- 现在理解:超保留的单词提供了一种机制来访问父类的方法和实例数据(不管它们是否被隐藏)。此外,可以使用super来访问父类的构造器(s)。所以正确的答案是A和B的组合这不是一个选项所以正确的答案是e。
- 错题5:
- 现在理解:派生类可以重新定义父类的任何实例数据或方法。父类的版本现在是隐藏的,但是可以通过使用super来访问,就像在超级。x中一样。
点评模板:
-
博客中值得学习的或问题:
- 课本总结运用总分总结构。首先在前面进行大概的描述,然后在后面进行详细的叙述。
- 每个版块都描述、解释的非常仔细。
- 排版漂亮,
背景换的比换衣服都快。
-
代码中值得学习的或问题:
- 代码有关问题记录过少,说明出现问题时,忘记或没有相关记录。
-
基于评分标准,我给本博客打分:14分。
点评过的同学博客和代码
-
本周结对学习情况
- 20172310
- 结对学习内容
- 第八章内容,关于多态性的学习以及排序和搜索的有关方法的学习。
- 关于四则运算的有关知识学习,例如栈、转换成后缀表达式。
- 没有合理安排实际的教训。
-
上周博客互评情况
其他(感悟、思考等,可选)
这一章多态非常的难以理解,看过两三遍课本都不一定完全的理解。只有经过看了蓝墨云班课以后才能有个大概的印象,嗯,继续努力吧!加油。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 075/200 | 1/1 | 05/20 | |
第二周 | 560/500 | 1/2 | 13/38 | |
第三周 | 972/1000 | 1/4 | 21/60 | |
第四周 | 694/1666 | 1/5 | 21/90 | |
第五周 | 1544/3095 | 1/6 | 30/90 | |
第六周 | 600/3627 | 1/7 | 30/120 | |
第七周 | 544/4200 | 2/9 | 20/140 | |
第八周 | 907/5107 | 2/10 | 20/160 |