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

教材学习内容总结

我的总结主要是按照课本的顺序,对一些重要的知识点做出的总结和记录,方便后期的查看,当然其中还有一些自己的理解。

后绑定:

  • 多态引用是可以在不同时间指向不同类型对象的引用变量。
  • 程序执行的某时刻产生一个请求,要求执行某段代码来完成一个方法调用,这称为一个方法调用与ー个方法定义的绑定。
    对于多态性引用,这种绑定要延迟到程序运行时才能执行、并且要绑定的方法定义取决于当时引用变量所引用的对象。这一被延迟的请求事件称为后绑定或动态绑定。

实现多态性:

可以用两种方式建立多态引用:继承和接口。
利用继承实现多态性:
  • 一个引用变量可以指向有继承关系的任何类的任何对象。
  • 任何类都是Object类的后代类,它的引用可以指向任何对象。
  • 实际将调用的方法版本取决于对象的类型而不是引用变量的类型。(考试里有碰到哦)
  • 父类可以用作方法参数的类型

    利用接口实现多态性
  • 接口名可以用于声明对象引用变量
  • 一个接口引用变量可以指向实现接口的任何类的任何对象。
  • 实现类与其实现接口的关系,就如同子类与父类的关系。一种“是”关系,这种关系奠定了多态的基础。
  • 当使用接接口引用变量时,只能调用定义在接口中的方法、即使接口引用変量所指向的对像还有其他一些可用方法,也不能调用。
  • 接口名也可以用作方法参数的类型。

排序

  • 选择法排序: 在一个列表中,从第一个数开始,从左向右进行扫描,遇到最小的,将其与第一个数字进行对调,
    再从下一个个数字开始,继续重复上面的操作,不断地找出最小的,直到最后一个数完成排序,形成有顺序的排列。
  • 插入排序法:不断地将一个新元素插入到已排好序的数列子集中。在每一轮排序中,将一个未
    排序的新元素插到已排序子集中的适当位置,直到整个数列有序排列为止。从只含有一个元素的“已排序”数列开始,对数列的前两个值排序
    如果必要则交换这两个值的位置,再将第三个值插入到相对于前两个值(已排序的值)的适当位置。每当完成一次插入操
    作,已排序子集中的值的个数增1不断重复这一过程,直到所有的值都插到自己的适当位置,数组中其他值会移动位置以空出位置空间插入位置元素,
    这时就完成了整个数列的排序。
  • 排序算法的比较:
    • 选择算法时有性能标包括算法的简易性、效率及存储空间需求量。
    • 选择法排序和插人法排序实质上有同等的效率。二者都有类似性质的外层循环和内层循环,两种算法都执行大约n²次比较操作。
    • 虽然两种算法执行的比较操作的次数相同,但选择法排序所执行的交换操作的次数更少,因此选择法优于插入法。

搜索

  • 线性搜索:从一个端点,以线性方式描整整个搜索池,因此称为线性搜索。
  • 二分搜索:如果一个数组中的元素是有序的(升序或降序),则二分搜索比线性搜索算法的效率高得多。
    二分搜索利用搜索池是有序的这一事实,减少了大量的比较操作。
  • 排序算法的比较:
    • 二分搜索比线性搜索的效率高,但是要求数据已做过排序。
    • 算法选择取决于具体条件。排序容易活数据量大,则二分搜索比较合适。

多态设计

  • 多态性允许用一致性的方法实现不一致的行为。
  • 应该训练自己的软件设计敏感性,善于识别能利用多态性解法的潜在问题。

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

  • 问题1:继承是如何支持多态性的呢?
  • 问题1解决方案:观察课本的例题发现,多态其实就是以不同的方式,但又有着一样的行为或是说目的来完成一个指定目标的过程。
    然后,在Java中,用父类声明的一个引用变量可以指向一个子类对象。如果两个类具有两个相同签名的方法,则这个父类引用就具有多
    态性(因为同样的方法名会有不同的版本)。
    就像课本的例题Exployee类中有一个pay()方法,继承他的子类也都有pay()方法,这样在staff类中实例化对象时就出现了多态性。

  • 问题2:课本上有提到一句“如果在Volunteer类中不重载pay()方法,则应将StaffMember设计成不能实例化的抽象类。”
    那么重载、重写和多态性有什么关系?
  • 问题2解决方案:当一个子类重载了其父类方法的定义时,实际上该方法的两个版本都存在。重写提供了多态性,因为适当的方法是根据当前被引用的对象而调用的,如果用一个多态性引用调用该方法,那么被调用方法的版本由执行方法调用的对象的类型。
    比如有一只鸟A和小鸟B,A教会了B吃饭和飞翔。
    对于飞翔,A是这样理解的,无非就是振动翅膀,而B有更深刻的理解,振动翅膀和利用好风。这样就是一个重载。B给飞翔增加了一个参数
    对于吃上,A喜欢吃虫子,B喜欢吃草,这就是重写。B重写了吃饭这个方法。
    而A和B正是多态的一个很好例子。

给大家两个参考:

重载与重写的区别
重写、覆盖、重载、多态几个概念的区别分析

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

  • 问题1:在完成PP10.1的课后练习时,我没有修改staff类直接就创建了一个接口,然后就是

  • 问题1解决方案:那接口实现多态性该怎么实现呢?
    之前是想将所有有关的含有payday方法的所有类实现接口,以达到目的,但是最后在Firm中实例化的对象只是Staff类,那我就直接改写了staff,

发现这样就可以实现多态性。(主要是课本上没有例子,所以理解的不是很清晰)

代码托管

上周考试错题总结

  • 错题1及原因,理解情况

多态性是由什么来实现的?
解析:这个题目其实上面我也有一些总结。重载只是为具有不同参数列表的方法提供了备选方案。
重写提供了多态性,因为适当的方法是根据当前被引用的对象而调用的。嵌入是类中包含的类。抽象与多态没有
任何关系。封装是使用可见性修饰符(公共的、私有的、受保护的)实现的。

  • 错题2及原因,理解情况

    Upcasting是完全安全的,它是Java支持的单一继承结构的产物。相比之下,向下转换必须由程序员显式地完成。
    Java只在一个方向上自动转换。在使用的可见性修饰符方面,Upcasting和downcasting的规则并不依赖于任何方式。

那么upcast到底是什么意思呢?

一)向上转型
(1)定义: 把对某个对象的引用视为对其基类引用的做法被称为“向上转型”。
这主要是由于子类的对象可以看成是基类的对象这原因而得来的,也就是具有is-a关系。
比如:
Useful useful = new MoreUseful();//右边是一个子类的对象,而左边是一个父类类型
//的变量,指向右边的子类对象。
(2)基类可以接收发给导出类的任何消息,因为二者有完全相同的接口,我们只需要
从导出类向上转型,永远不需要知道正在处理的对象的确切类型,这也就是多态性决
定的。利用多态性,具有同样方法名和方法特征的方法根据调用方法的对象的类型,
可以产生不同的动作,这极大地增加了程序员的表达能力。

这是一篇参考资料
java中向上转型(upcast)和向下转型(downcast)

  • 错题3及原因,理解情况

虽然继承和接口支持多态,但只有在有后期绑定时才会这样做。但是,重载是多态性一(方法)名的一种形式,多个主体,
只要程序使用重载,多态就在使用中。

  • 错题4及原因,理解情况

  • 解析:
    之前是因为认为println()方法能够处理如此广泛的对象,并正确地打印它们,这是println()方法的重载,而重载不是多
    态性的体现。其实这题会错和上一题原因是一样的。虽然继承和接口支持多态,但只有在有后期绑定时才会这样做。但是,
    重载是多态性一(方法)名的一种形式,多个主体,只要程序使用重载,多态就在使用中

结对及互评

点评:

  • 博客中值得学习的或问题:

    • 队友的教材内容总结一直都很详细,并且能够根据自己的理解举出新的例子,使自己的理解更加深刻。
    • 对于教材问题的提出和解决记录的很好,而且问题相应的得到了解决。
    • 在代码问题和教材问题的总结中有些地方有重复,可适当删减。

点评过的同学博客和代码

  • 本周结对学习情况

    • 20172309
    • 结对学习内容
      • 教材第十章——多态性的学习与问题讨论。
      • 四则运算相关知识的学习。
      • 讨论栈的用法和进行四则运算出题和计算的编程。
  • 上周博客互评情况
    • 20172309

    • 20172302

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

实话觉得这周的任务量有点大,而且恰逢五一假期,之前就已经安排好了出游的计划,所以得知这周有两篇博客时,心情是有些
烦躁的。一遇到问题,就有点急,在老师上第十章的课程时,我的自主学习都没有完成。好在后来我和队友都加紧了节奏,完成
了我们的任务。学习Java需要时间,我要更好地来安排我的时间,高效的学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 127/127 1/1 25/25
第二周 278/405 1/2 20/45
第三周 442/847 1/3 20/65
第四周 1063/1910 2/5 30/95
第五周 840/2750 1/6 27/122
第六周 631/3381 1/7 20/142
第七周 914/4295 1/8 20/162
第八周 2534/6829 2/10 30/192

参考资料

  • 《Java程序设计与数据结构教程(第二版)》
  • 《Java程序设计与数据结构教程(第二版)》学习指导
  • 重载与重写的区别
  • 重写、覆盖、重载、多态几个概念的区别分析
  • java中向上转型(upcast)和向下转型(downcast)

转载于:https://www.cnblogs.com/Qiuxia2017/p/8940407.html

20172310 2017-2018-2 《程序设计与数据结构》第八周学习总结相关推荐

  1. 20172304 《程序设计与数据结构》第九周学习总结

    20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...

  2. 20162302 《程序设计与数据结构》第一周学习总结

    20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...

  3. 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结

    学号 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常是定义一个非正常情况或错误的对象,由程序或运行时环境抛出. 异常与错误不同,错误代表不可恢复的问题 ...

  4. 20172304 《程序设计与数据结构》 第二周学习总结

    20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合 ...

  5. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...

  6. 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结

    20162329 2017-2018-1 <程序设计与数据结构>第五周学习总结 教材学习内容总结 1.学习目标 了解集合的概念 了解并使用抽象数据类型 初步了解使用Java泛型 学习栈这种 ...

  7. 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结

    第九周学习总结 一.学习目标 二叉查找树的理解 二叉查找树的实现 平衡二叉查找树 哈夫曼树的实现 堆的理解 堆的实现 二.学习内容 1.二叉查找树 思路: 二叉查找树与一般二叉树的区别在于,二叉查找树 ...

  8. 20162303《程序设计与数据结构》第一周学习总结

    学号 2016-2017-2 <程序设计与数据结构>第1周学习总结 教材学习内容总结 本周学习了基本的JAVA知识,虽然比较基础,但是在实际过程中还是出现了许许多多的问题,代码一遍遍的敲错 ...

  9. 20162330 2017-2018-1《程序设计与数据结构》第二周学习总结

    2017-2018-1 学习总结目录: 1 2 3 5 6 7 9 10 11 12 目录 0. 本周学习内容总结 0.1 Comparable接口与Comparator接口的使用 0.2 泛型方法设 ...

  10. 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结

    教材学习内容总结 本周学习第十一章异常和第十二章 第十一章-异常 异常是一个定义非正常情况或错误的对象,由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理. 错误和异常都是对象,代表非正常情况或 ...

最新文章

  1. 彻底解决_OBJC_CLASS_$_某文件名“, referenced from:问题
  2. 设计前沿:16款扁平风格 iOS 7 图标设计
  3. SqlServer 获取汉字的拼音首字母
  4. RocketMQ入门到入土(一)新手也能看懂的原理和实战!
  5. debian架设php,Debian 下搭建php-fastcgi方式,nginx
  6. java生日正则表达式_java之正则表达式、日期操作
  7. 构建微服务(Building Microservices)-PDF 文档
  8. 一步一步写算法(之链表重合)
  9. ROS学习:智能车室外光电组仿真
  10. linux--GCC用法
  11. oracle 查询数据库表空间大小和剩余空间
  12. Eclipse中设置自定义文档签名
  13. linux图形界面漏洞,ManageEngine DesktopCentral任意文件上传漏洞(CVE-2014-5007)
  14. spotify注册服务器,【评测】Cocktail Audio N25:集USB解码、TIDAL、Spotify、NAS 串流、音乐服务器于......
  15. 研究生学习生活日记——第十三次组会
  16. 淘宝购物流程图 基本流和备选流以及测试用例
  17. C++ 学习笔记(22) Builder Pattern
  18. 一个超级棒的 Chrome 翻译插件
  19. scratch算立方根
  20. 分别实现网页播放mp3、flv、wmv、Flash,代码兼容FireFox

热门文章

  1. 当当网首页——JS代码
  2. MySQL索引 专题
  3. 【ASP.NET Web API教程】2.3.3 创建Admin控制器
  4. MFC的进程和线程,非正常终止
  5. 机动车号牌图像自动识别技术规范
  6. no match for call to ‘(std::__cxx11::string {aka std::__cxx11::basic_string
  7. Python面向对象(继承)
  8. [HEOI2017] 相逢是问候
  9. python3知识点之---------字符串的介绍
  10. vue 使用font-awesome 只需两步