学号20172328《程序设计与数据结构》第八周学习总结
教材学习内容总结
- 1.绑定:在程序执行的某个时刻可能会产生一个请求事件,要求执行某段代码来完成一个方法调用,这种请求事件称为一个方法调用与一个方法定义的绑定。
- 后绑定:对于多态性引用,这种绑定延迟到程序运行时才能执行,而且要绑定的方法取决于编译阶段。对于多态性引用,这种绑定要延迟到程序运行时才能执行,而且要绑定的方法取决于当时引用变量所引用的对象。这一被延迟的请求事件被称为后绑定或动态绑定。
- 2.多态性引用可以随时间变化指向不一样类型的对象。对于多态性引用,方法调用与方法定义代码的绑定在运行时执行。
- 在Java中,能够用两种方式创建起多态性引用:
继承方式
和接口方式
。
- 3.利用继承实现多态性:
- 当用类名声明了一个引用变量时,这个变量能够指向该类的任何一个对象,也能够引用经过继承与它所声明的类型有关的任何类的对象。
- 而且这种关系对整个类层次结构都有效。例如:
Animal creature = new Horse
(Animal是Mammel的父类,Horse是Mammel的子类)
- 4.利用接口实现多态性:
- 类名能够用于声明对象引用变量,接口名也能够用于作声明对象引用变量的类型。
- 一个接口引用变量能够指向任何实现该接口类的对象。
- Please Remember:当使用接口引用变量时,只能调用在定义在接口中的方法,即便接口引用变量所指向的对象还有一些其余可用方法也不可以实现调用。
- 接口名能够用做方法参数,使得任何一种实现同一接口的类对象均可以做为参数传给方法。 方法的参数可使多态性的,使得方法所接收的参数具备灵活性。
- 5.排序:排序是将一组元素调整为有序排列的过程。
- 选择排序法:先去检索全部元素,找最小和第一个换位置,继续找二小与第二元素换位置~~~而后就排成了从小到大递增有序数列。同理也能够排出从大到小递减数列。
int min;
Comparable temp;
for(int index = 0;index < list.length-1 ; index ++)
{
min = index;
for(int scan = index + 1; scan < list.length ; scan ++)
if(list[scan].compareTo(list[min])<0)
min = scan ;
temp = list[min];
list[min] = list[index];
list[index] = temp;
}
- 插入法排序:先对数列的前两个元素进行排序,而后在插入第三个元素而后排序·······而后就排成了从小到大递增有序数列。同理也能够排成从大到小递减数列。
for(int index = 1;index < list.length;index++)
{
Comparable key = list[index];
int position = index;
while(position > 0 && key.compareTo(list[position-1]) < 0)
{
list[position] = list[position -1];
position--;
}
list[position] = key;
}
- 两种排序算法的比较
效率是比较排序算法的基本标准。选择插入法和插入排序法实际上有相同的效率。两种算法大约都执行n²次比较操做(其中n是数列中值的个数)。选择排序法容易理解,大多数状况下能一次性准确的移动到本身的位置,因此选择排序法优于插入排序法。
教材学习中的问题和解决过程
- 问题1:对象?引用变量??对象引用变量???
- 1.(〃'▽'〃)本题解答:当时在看书过程当中一直弄不清这都是些什么。迷迷糊糊、稀里糊涂看完两遍书都不怎么明白。而后只能去寻找一下详细解释。
Vehicle veh1;
veh1 = new Vehicle();
效果是同样的。这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象自己。html
在堆空间里建立的实体,与在数据段以及栈空间里建立的实体不一样。尽管它们也是确确实实存在的实体,可是,咱们看不见,也摸不着。不只如此,
咱们仔细研究一下第二句,找找刚建立的对象叫什么名字?有人说,它叫“Vehicle”。不对,“Vehicle”是类(对象的建立模板)的名字。
想看详细的,戳这里java
- 问题2:接口能够实现接口吗?接口能够继承接口吗?这二者有什么关系?
- 2.(〃'▽'〃)本题解答:经过小组讨论,获得问题的解决,也去网上搜索了。
-
接口能够继承接口,而且能够继承不仅一个接口,可是不能实现接口。由于接口的成员方法都具备抽象属性,不具备方法体,没法实现继承的接口。git
- 我本身的理解:接口是常量和抽象方法的集合体。实现接口是指将接口中的抽象方法具体化,继承接口是指将接口中的方法继承下来但不具体化。所以,接口不能实现接口而接口能够继承接口。
- 问题3:课本中SR10.5的答案不能理解。设MusicPlayer类是CDPlayer类的父类,判断下列语句是否合法。
MusicPlayer mplayer = new MusicPlayer();
CDplayer cdplayer = new CDPlayer();
mplayer = cdplayer;
答案是:第三条语句不合法,一个MusicPlayer不必定就是CDPlayer。没有++先用cast进行类型转换++就直接赋值是不合法的。程序员
- 3.(〃'▽'〃)本题解答:子类继承父类是对父类所提供的服务接口的一个扩展,也就是说 父类提供的接口是子类所提供接口的一个子集,因此说单纯的父类对象时没法转型某个子类对象的。
java对象类型转换
- 问题4:对课本上SR10.11的c、d问题不理解。(题目太长很差发挥,书本322页你想了解的话去看一下喽ヾ(◍°∇°◍)ノ゙)
4.(〃'▽'〃)本题解答:接口的引用变量能够被实现接口对象赋值,至关于将地址赋给它。
❀拓展:继承中也能够将继承父类的两个子类的对象相互赋值,其实质也是改变对象地址。算法
代码调试中的问题和解决过程
- 问题1:在作pp10.1时就遇到了卡壳的地方,我建立了一个payable接口,而后不知道给接口里面放什么方法,思索良久后本身编了一个不带返回值的payable抽象方法,可是不能成功而且也没法输出具体的有效的东西。
- 1.(〃'▽'〃)本题解答:我仍是询问了同窗,将Payable接口中的方法直接改为了payday(),而后就可以输出了。再加思索,我以为是由于继承接口后要去实现它才能够,本身的问题原来是出如今这里。其实很简单的事情。
问题2:开始作pp10.5,参考了同窗们的博客,但本身仍是没有明晰的思路。看到侯泽阳同窗将DVDCollection对象改为了DVD数组对象,以为很是聪明,本身终于理解了,一步一步改后,而后!!!!!bug华丽登场。
编程
2.(〃'▽'〃)本题解答:今天经过晓海同窗的认真讲解成功找到了问题所在,应用这个类也须要Comparable接口,要实现Comparable接口就要提供compareTo方法的定义(实现代码)。书上的Contact类就是很好的例子。而后我直接用了刚改写的成为递减的Sorting类中插入排序法进行方法调用,而后用for-each遍历出数组。而后我就又用选择排序法试了试,而后发现都是能够的。给你贴图看!呐!这件事让我学到,不会的话写博客贴出来,说不定好心人就帮你解决了呢!还有就是,看书要仔细要仔细要仔细。
数组
第一次用IDEA进行代码量统计哦
(statistics.sh脚本的运行结果截图)
数据结构
上周考试错题总结
- 问题1: If a programmer writes a class wanting it to be extended by another programmer, then this programmer must(若是一个程序员写了一个类,这个类想要被其余程序员拓展,那么这个程序员应该?)
A . change private methods and instance data to be protected(将私有方法和示例数据改成protected型)
B . change public methods and instance data to be protected(把公有方法示例数据改成protected型)
C . change all methods to be protected(改变全部的方法为protected型)
D . change the class to be protected(将类改变为protected型)
E . none of the above, the programmer does not have to change anything(上述没有正确答案,这个程序员不须要改变任何)
- 问题1分析和领悟:正确答案A。我当时选择E。声明为protected的部分能够由定义它们的类的任何子类访问,而声明为private的部分不能被任何其余类访问。所以,之前定义的private项必须受到保护。之前定义的public项应该保持,以便全部其余类仍然能够访问这些public项。之前定义的private不该该公开,由于这将容许全部类访问它们,而不只仅是子类。
- 问题2:Which of the following is true regarding Java classes?(关于java类,下面哪个是正确的?)
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(全部类都有1个或者0个父类和无限多的子类)
- 问题2分析和领悟:正确答案选A,我当时选择E。老师在课堂上强调的时候才对这个问题有了更深入的了解。object类是全部类的父类,也就是说,全部的类都是object类派生出来的。所以答案选A。
- 问题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
- 问题3分析和领悟:正确答案选D,我当时选择的是A。,当时还没学到多态,看到继承一章的关键词protected就果断下手了。其实多态表示变量能够有多种形式存在。在通常状况下,Java被强制定义为,一个变量,一旦声明为某种类型,就永远不能改变其为不一样的类型。惟一的例外是多态变量能够是任何类型的派生类(尽管不是在同一时间,变量也能够从一种类型转换为另外一种类型)。
- 问题4: Using the reserved word, super, one can(用保留字super,可以)
A . access a parent class'constructor(s)(访问父类构造函数)
B . access a parent class'methods and instance data(访问父类方法和实例数据)
C . access a child class'constructor(s)(访问子类构造函数)
D . access a child class'methods and instance data(访问子类方法和实例数据)
E . none of the above(没有正确选项)
- 问题4分析和领悟:正确答案选择E。我当时选择A。本题关键点在于A 和B 答案都是对的,因此应该将两个答案结合起来才行,当时只看了一个答案草草完事,很是的不细心,之后要注意。
- 问题5: Why shouldn't an abstract method be declared final?(为何不该该把一个抽象的方法声明为final呢?)
A . There's nothing wrong with doing so(这样作没毛病)
B . Abstract methods cannot be overridden and they must be if a concrete class ever is to be instantiated(抽象方法不能被覆盖,它们必须是要实例化的具体类)
C . So long as the Abstract method never actually is used in by any other method, there's no problem with doing this(只要抽象方法历来没有被任何其余方法使用过,那么作这个就没有问题了)
D . So long as the Abstract method is declared in a Class (not an Interface), there's nothing wrong with doing this(只要抽象方法在类中声明(而不是接口),那么作这件事就没有什么错)
E . None of the above(没有正确选项)
- 问题5分析和领悟:正确答案B,我当时的选项E,
我也不知道我为何要选E。要使抽象方法成为具体的方法,它必须被覆盖。声明一个方法是final的,就让其不可能被覆盖。所以不能。
- 问题6: Interface classes cannot be extended but classes that implement interfaces can be extended.(接口类不能被扩展,可是实现接口的类能够被扩展)
A . true
B . false
- 问题6分析和领悟: 正确答案选B,当时我选的是A,属于对概念不清楚。任何类均可以被扩展,不管它是一个接口,仍是实现一个接口,或者二者都没有。惟一的例外是,若是该类被显式地用“final”这个词进行修饰,在这种状况下,它不能被扩展。
此次的错题改正里面的翻译是本身查阅翻译的哟!!函数
结对及互评
-20172301
-20172304学习
点评模板:
- 博客中值得学习的或问题:
- 20172301:生动详细,须要了解向上转型和向下转型的小伙伴们必定不要错过这篇好博,颜色缤纷,吸引眼球,先睹为快。
- 20172304:简明扼要,须要学习pp10.5编程项目的不要错过这篇博客,但愿就是能稍微多一些内容,显得更加充实一点。
- 代码中值得学习的或问题:
其余(感悟、思考等,可选)
五一游玩带给我不少欢乐清闲,同时也带给我很大心理压力。当再次拿起课本大脑空空,打开电脑蓝墨云红红的时候,忽然就有一种无所适从的感受,没有归属感大概如此。
---------------------------------
课程的学习进度从未中止,时间也容不得我慢慢来。我但愿深吸一口气我可以从新开始打起精神认真对待,灵魂的疲惫让路程艰难,心里的坚决让本身继续前进。
学习进度条
目标 |
5000行 |
30篇 |
400小时 |
第一周 |
100/100 |
1/1 |
15/15 |
第二周 |
377/477 |
1/2 |
20/35 |
第三周 |
280/757 |
2/4 |
22/57 |
第四周 |
973/1730 |
1/5 |
35/92 |
第五周 |
1000/2730 |
1/6 |
40/132 |
第六周 |
729 /3459 |
1/7 |
40/172 |
第七周 |
660/4119 |
2/9 |
30/192 |
第八周 |
1417/5536 |
3/12 |
30/222 |
参考资料