20172323 2017-2018-2 《程序设计与数据结构》第八周学习总结
教材学习内容总结
- 第十章 多态性
- 后绑定:
- 多态性引用能够随时间变化指向不同类型的对象。
- 程序执行会产生一些请求事件,要求执行某段代码来完成一个方法调用,这种请求事件称为一个方法调用与一个方法定义的绑定。对于多态性引用,绑定要延迟到程序运行时才执行,这一被延迟的的请求事件称为后绑定
- 后绑定的效率要低于编译阶段的绑定效率,但灵活性更高。
- 由继承实现多态性:
- 一个引用变量可以指向有继承关系的任何类的任何对象。
- 实际调用的方法版本取决于对象的类型而不是引用变量的类型。
- 多态性的实质是,每个类都很清楚自己如何完成一个制定的行为。(SRP原则应该指的就是这个吧)多态机制允许用具有一致性但又独特的方式处理类似的对象。
- 利用接口实现多态性:
- 接口名可以用于声明对象引用变量
- 一个接口引用变量可以指向实现该接口的任何类的任何对象。当使用接口引用变量时,只能调用定义在接口中的方法。
- 方法的参数可以是多态性的,使得方法所接受的参数具有灵活性。
- 排序:
- 选择法排序:扫描整个数组找到最小值,将最小值与数列中第一个位置的值交换位置,循环下去就得到一个从小到大排列的有序列表。
- Compareble接口包含一个返回整型值的方法compareTo:如果i=0, 也表明对象x与y排位上是相等的如果返回数值i>0 则意代表x > y,反之若i<0则代表x < y。
- 插入法排序:不断地将一个新元素插入到已排好序的数列子集中,直到排序完成。
- 搜索:
- 线性搜索:
- 二分搜索:从有序数列的中点开始搜索。
教材学习中的问题和解决过程
- 问题1:
实际调用的方法版本取决于对象的类型而不是引用变量的类型
这句话是怎么理解的?
-
问题1解决方案:引用变量可以是多态性的,在不同的时间它可以指向不同的对象。引用变量指向什么对象时,就调用该对象的方法。
就引用老师给的例子,Holiday类有一个celebrate方法,Christmas类覆盖了此方法。
如果定义
Holiday day1 = new Holiday();
Christmas day2 = new Christmas();
day1.celebrate();
day2.celebrate();
那么day1和day2引用的celebrate方法分别是Holiday类和Christmas类的celebrate方法。 -
问题2:发现我连声明对象引用变量都不知道是什么意思。。。
-
问题2解决方案:根据老师的讲课
对象引用变量可以指向其声明的类的对象,还可以指向任何因继承而发生关系的类的对象
也就是说,如果已经确定了“Creature”属于Animal类,那么它可以指向Animal下的任何子类,既可能指向pig类,也可以指向cat类。
- 问题3:外层循环和内层循环?
- 问题3解决方案:外层循环相当于是记住数组里的一个数,而内层循环相当于是将这个数与数组里剩下里的数做比较,分出大小。
代码调试中的问题和解决过程
-
问题1:在对本章的代码进行编译时,出现了如图的情况
-
问题1解决方案:
嘴上说着不愿意,但是身体似乎很诚实,当我焦头烂额地不知道怎么解决时,却发现编译出来的class文件就摆在那里!!!???在网络上简单地寻找了一下解决方案,似乎是我的JDK出现了问题(应该是版本的问题) -
问题2:同样使用IDEA也出现了让人很迷的问题,最基本的
java.lang.*
他无法识别。同样的String,compareTo等等最基本的东西一律是标红的,上图
-
问题2解决方案:按着红色小灯泡的提示重新setupJDK,但是依然无法解决问题。重新下载JDK n次之后,还是没办法解决。于是我又重新温习了一遍Intelij IDEA简易教程,一开始以为是教程中提到的“不能都安装在Java文件夹的根目录下,JDK和Public JRE安装在同一文件夹会出错”引起的错误,但尝试将JDK和JRE分开存放之后依然提示错误。往下一看,发现老师提到了此问题,发现如IDEA提示一样需要SetupJDK但之前也做过此类尝试,按着他的要求无论是直接确定还是配置之后再确定,窗口一关一点反应都没有,所以这次索性就直接把IDEA里提示配置的JDK删除,重新下载一次JDK,再重新进行配置,终于这一次没有变红了!马上进行编译运行,又
特么出现这样的提示
然后我在网上搜索JAVA找不到或无法加载主类的解决方案,只得到了如下的解答
重新设置环境变量之后依然无法解决,于是又换了一个关键词搜索
仔细他给到的几个原因,突然想到是不是我的class文件出现了问题,返回去一看,果然是连bin文件夹都没有设置好(大写的尴尬),再重新设置一下,总算是设置没有问题了。
不过我到最后都没有明白为什么IDEA会突然出现这样的问题。
代码托管
上周考试错题总结
- 错题1:Abstract methods are used when defining
A . interface classes
B . derived classes
C . classes that have no constructor
D . arrays
E . classes that have no - 解析:在interface中所有的方法都是public abstract的,即使你没有申明它是public abstract的。
- 错题2:Which of the following is true regarding Java classes?
A . All classes must have 1 parent but may have any number of children (derived or extended) classes
B . All classes must have 1 child (derived or extended) class but may have any number of parent classes
C . All classes must have 1 parent class and may have a single child (derived or extended) class
D . All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes
E . All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes - 解析:Java支持继承,但不是多重继承,所以Java类可以有任意数量的子节点,但只有一个父节点object(类的父类也可看成是object类)。 而且,由于所有Java类都直接或间接地从对象类继承,所以所有Java类都有一个双亲类。
- 错题3:A variable declared to be of one class can later reference an extended class of that class. This variable is known as
A . protected
B . derivable
C . cloneable
D . polymorphic (多态)
E . none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class - 解析:术语“多态性”(polymorphic)可以理解为“有许多形式”。在一般情况下,一个变量,一旦声明为某一类型,就永远不能改变为其他类型。唯一的例外是多态变量可以是任何类型的派生类(尽管不是在同一时间,变量可以从一种类型转换为另一种类型)。
- 错题4:In order to determine the type that a polymorphic variable refers to, the decision is made
A . by the programmer at the time the program is written
B . by the compiler at compile time
C . by the operating system when the program is loaded into memory
D . by the Java run-time environment at run time
E . by the user at run time - 解析:多态变量可以有许多不同的类型,但是在程序执行之前,它不知道它采用了哪种类型。在这个变量被引用的时候,必须做出决定。这个决定是由运行时环境根据变量的最新赋值决定的。多态性引用能够随时间变化指向不同类型的对象
- 错题5:Using the reserved word, super, one can
A . access a parent class'constructor
B . access a parent class'methods and instance data
C . access a child class'constructor
D . access a child class'methods and instance data
E . none of the above - 解析:保留字super提供了一种机制来访问父类的方法和实例数据(不管它们是否被隐藏),此外也可以用来来访问父类的构造器,所以这道题的A、B选项都是正确的。
- 错题6:Interface classes cannot be extended but classes that implement interfaces can be extended.
A . true
B . false - 解析:任何类都可以被扩展,无论它是一个接口,还是实现接口的类,或者两者都不是但如果该类用“++final++”这个词进行修饰,在这种情况下,它不能被扩展。
- 错题7:If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but can not redefine x to be a different type.
A . true
B . false - 解析:派生类可以重新定义父类的任何实例数据或方法。父类的数据虽然是隐藏的,但是可以通过使用super来访问。
结对及互评
-
博客中值得学习的或问题:
- 编程项目过程的记录真的是值得学习,我每一次都是做过了就过了,不懂得怎么去记录编程的过程。
-
代码中值得学习的或问题:
- 两位同学的代码都是能看出有前瞻性,他们从写代码的开始就能把思路基本理清,值得学习。
-
基于评分标准,我给谭鑫的博客打分:12分。得分情况如下:
正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
排版精美(加1分)
错题学习深入(加1分)
点评认真,能指出博客和代码中的问题(加1分)
问题7个(加7分) -
基于评分标准,我给方艺雯的博客打分:12分。得分情况如下:
正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
错题学习深入(加1分)
点评认真,能指出博客和代码中的问题(加1分)
问题8个(加8分)
点评过的同学博客和代码
其他
这章的学习主要需要结合课本中提供的例子来学习,其中排序和搜索的概念应该多加复习,尽快掌握。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 117/117 | 1/1 | 19/19 | |
第二周 | 289/406 | 1/2 | 21/40 | |
第三周 | 403/809 | 2/4 | 22/62 | |
第四周 | 1783/2592 | 1/5 | 35/97 | |
第五周 | 770/3362 | 1/6 | 25/122 | |
第六周 | 734/4096 | 1/7 | 25/147 | |
第七周 | 687 / 4783 | 1/8 | 25/172 | |
第八周 | 824/5607 | 2/10 | 30/202 |
-
计划学习时间:20小时
-
实际学习时间:30小时