学号 2016-2017-2 《程序设计与数据结构》第7周学习总结
教材学习内容总结
课本内容:
- 多态引用(一个在不同时刻可以指向不同类型对象的引用变量)
- 创建多态引用的方法(继承和接口)
- 接口(一组常量和抽象方法)
视频内容:
-使用软件包的意义:将同名的类放于不同的文件夹中。
-打包的方法:在主函数前输入“package ++包名++”
-访问权限:
public(公共权限):实现跨包的调用和访问。
private(私有权限):其修饰的变量和方法只可以在当前类中调用。
default(包间权限):该下权限限制了调用只能在同包中发生。
protected:其修饰的变量/成员函数只被这个类的子类调用。
教材学习中的问题和解决过程
- 问题1:在学到多态的创建多态引用的两种方式,我对通过继承来实现多态引用产生了迷惑,且书中例子繁杂,也难以领略,完全不知道要如何操作
- 问题1解决方法:
使用继承创建多态引用:
我用我原来创建的father.java、son.java和Test.java,经过多次的修改,尝试过许多次后,最后的结果是得到:
其中图三就用到了多态引用的格式。经过编译运行后,可以看到:
由此可以得到通过继承来创建多态的引用过程是:
还有一个要注意的地方是:父类中的方法为抽象函数,不能有函数体。
- 问题2:在看到书本说接口来创建多态的时候,书中提及了用接口子类来实现实例化。然后我思考:接口能否做到自我实例化?
- 问题3解决方法:我有接口father.java以及实现该接口的子类child.java
当我在测试代码test.java尝试接口自我实例化的时候,发现了这样的情况:
方法直接出现,上面的标识也表示对该方法的重写。因此可以得到结论:接口可以实现自我实例化,但要在下面按对方法进行重写,但这样会导致代码的繁杂。因此这不现实。
代码调试中的问题和解决过程
- 问题:在学到Comparable接口时,发现书中的内容少之又少,我便尝试着去运用这一接口的用法
但是发现用平时的接口实现方法根本不能对这个接口进行实现,然后我又上网查找资料:
于是我便更改我的代码:
仍然存在问题,然后我看Idea反馈的错误原因:
发现它需要我的自定义类要为抽象类,于是我便试着去更改:
发现它并没有报错,为什么?为什么要抽象类?
- 问题2解决方案:后来在一个偶然的经历中:
这里也出现了这样的情况,但我暂时先放着,然后继续下去
出现的错误居然消失了,至此可以得到:创建类对接口的实现,就必须要复写接口中的所有方法函数,否则子类无法编译。自然对于compare接口也要做类似的事,对它唯一的方法Compareto()要做复写,这样才能实现实现的功能。
该问题的参靠资料:
代码托管
上周考试错题总结
- 错题1:In order for derived classed to have access to encapsulated data members and methods of superclasses, the data members and methods should be declared using the ____________________ modifier(为了能在派生类中引用超类中封装的数据成员和方法,可以使用修饰符____声明).
A .
private
B .
public
C .
protected
D .
final
E .
static
正确答案:C
我的答案:E
题解:使用受保护修饰符声明的数据成员和方法可以由继承层次结构中的子类访问,但仍从层次结构之外的类和方法中封装。
错因:没能理解题目与“封装”的含义。一直以为封装就是指将变量或方法私有化,没能理解封装还有对象的范围。
- 错题2:When a variable is declared in a subclass has the same name as a variable declared in a superclass, it is called a _______________ variable(当子类声明的变量和超类声明的变量相同时,该变量称为____变量).
A .
final
B .
shadow(隐藏)
C .
static
D .
dead(死亡)
E .
this is not allowed in Java(Java禁止变量名相同)this is not allowed in Java(在Java中这是不允许的)
正确答案:B
我的答案:C
题解:一个shadow变为一个具有相同名称的类变量作为父类的变量
- 错题3:A class declared as final _________________________________ (声明为final的类_____).
A .
cannot be changed(不能更改).
B .
cannot have subclasses(不能拥有子类).
C .
cannot have superclasses(不能拥有超类).
D .
has several abstract methods(具有几个抽象方法).
E .
cannot be used in a program(不能在程序中调用).
正确答案:B
我的答案:A
题解:final限制了传承。
- 错题4:If a subclasses constructor does not make an explicit call to a superclass's constructor, ______________________ (如果子类构造函数没有显式调用超类的构造函数,那么________).
A .
a run-time error will result(将产生运行时错误).
B .
a compile-time error will result(将产生编译时错误).
C .
the constructor will be called anyway(构造函数不管怎样都会被调用).
D .
the class will be implicitly declared as abstract(该子类将被隐式声明为abstract).
E .
none of the above(以上都不是)
正确答案:C
我的答案:B
题解:若子类没有对父类的构造函数进行调用,子类会自行隐式调用父类的构造函数,以实现变量的初始化。
- 错题5:Methods and variables declared as private in a parent class cannot be accessed in a child class(在父类中声明为private的方法和变量不能被子类访问).
A .
true
B .
false
正确答案:A
错误答案: B
题解:私有权限限定了变量和方法只能在当类中进行引用。
结对及互评
点评过的同学博客和代码
-
本周结对学习情况
- 20162315马军
- 结对学习内容
- IDEA Junit包的安装
- TDD测试异常情况的处理
-
上周博客互评情况
其他
这一周进行了java实验,不试不知道,一试吓一跳,我们的Javaz知识储备只是皮毛罢了,这表示我们还有海量的Java知识要学,仅仅靠课堂上的时间是微不足道,杯水车薪的,课后只花一点时间也是不够的,课后的大多数时间都应用于学习中,这样才能进步,这样才能学得更多,不然就只能在舒适区中原地踏步,难有提升。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
月目标 | 2000行 | 4篇 | 60小时 | |
第一周 | 96/96 | 1/1 | 13/13 | 初步认识了JAVA |
第二周 | 646/736 | 1/2 | 18/38 | 懂得代码的一定格式 |
第三周 | 536/1272 | 1/3 | 20/33 | 学会了用IDEA |
第四周 | 1296/2568 | 1/4 | 30/63 | 学会了初步编程 |
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
月目标 | 5000行 | 4篇 | 120小时 | |
第五周 | 1523/3425 | 1/1 | 26/89 | 学会自创类以及面向对象的方法 |
第六周 | 536/3864 | 1/2 | 20/109 | 学会了继承 |
第七周 | 592/4441 | 1/3 | 22/109 | 了解学习了OO(Object Oriented) |
-
计划学习时间:24小时
-
实际学习时间:22小时