20165214 2017-2018-2 《Java程序设计》第四周学习总结
教材学习内容总结
- 每一个子类只能有一个父类,而一个父类能够有多个子类。可使用关键字
extends
来定义一个类的子类:class 子类名 extends 父类名
。不加extends关键字时,默认为Object类,Object类是任何类(除了自己)的祖先类。
- 简单的说,子类拥有父类的全部(除了private类及不一样包的友好类),同时能够拥有本身新的东西。
- 若是一个类A想经过一个其余类B的子类C创造对象来调用它的变量或者方法:①若要调用的是子类C内部新定义的而不是继承的,只要C与A同包便可; ②若要调用的是C继承下来的,只要C所继承的祖先类与A同包便可。
- 子类能够经过继承的方法来操做未继承的变量。
instanceof
运算符:除了以前在第二章总结的之外,还有:当子类创造的对象与父类去使用instanceof运算符时,得出的结果也是true。
- 当子类新声明的变量名与继承的变量名相同时,继承的变量名会被隐藏。可是咱们仍能够经过继承的方法来对隐藏的变量名进行操做。(继承的方法所操做的成员变量必定是被子类继承或隐藏的成员变量。)
- 方法重写:要求新的方法的类型与父类相应方法一致或者是父类的方法的类型的子类型,而且这个方法的名字、参数个数、参数的类型和父亲的方法彻底相同。重写方法能够操做继承的变量、方法,也能够操做子类新声明的成员变量、方法。若是子类想要使用被隐藏的方法或者成员变量,需使用super。注意,重写方法时不容许下降方法的访问权限。
super
的使用方法:经过命令super.[成员变量]和super.[方法]来分别使用被隐藏的变量和方法。在父类中定义多个构造方法时,应当包括一个不带参数的构造方法,这是由于若是在子类中没有写出super关键字,默认地有super()
。
final
关键字。final关键字能够修饰类、成员变量和方法中的局部变量。①修饰类:被修饰的类不能有主类。
②修饰父类的方法:子类不能对被修饰的方法进行重写
③修饰变量:被修饰的变量变为常量,常量在运行期间不能发生变化。
- 上转型对象。经过把子类建立的对象的引用赋给父类建立的对象来获得上转型对象。上转型对象不能操做子类新增的成员变量与方法,可是能够操做子类继承或隐藏的成员变量或方法。注意的是,若是子类重写了父类的静态方法,则子类对象的上转型对象不能调用子类的重写静态方法,只能调用父类的静态方法。
- 父类的方法被子类重写时,能够各自产生本身的功能行为。
- 关键字
abstract
:①修饰方法:被修饰的方法只能声明不能运行。
②修饰类:被修饰的类中能够有abstract方法,也能够有非abstract方法。而没被修饰的类只能有非abstract方法。
- abstract父类的abstract子类能够继承或重写父类的abstract方法,可是abstract父类的非abstract子类必须重写父类的abstract方法。
- abstrcat的类只能声明对象可是不能建立对象,可是该对象能够成为其子类的上转型对象。
- abstract不能和final同时修饰。
- abstract类在实际中很好用,由于它注重面向对象而不是面向类。
- 开闭原则是对扩展开放,对修改关闭。我以为在这其中abstract起了很大的做用。遵照开闭原则的系统易于维护。
- 使用
interface
来定义一个接口。接口=接扣声明+接口体
。接口体中只有常量(权限为public,且为static常量)和抽象方法(权限为public,为stract型),没有变量。
- public接口能够被任意一个类实现,友好接口可被同一个包里的接口实现。
- 接口也能够经过extens来继承。
- import语句能够引入包的类也能够引入包的接口。
- 经过类来实现接口:在类声明中使用关键字implements来声明一至多个接口。非抽象类实现了某个接口,必定要重写这个接口中的全部方法(要去掉abstract,体现public)。抽象类实现了某个接口,既能够重写,也能够不重写。
- 能够经过接口名来访问常量,也能够经过实现接口的类来直接使用。
接口回调:简单的说,接口回调就是为了可以调用某个接口中的方法。具体操做:类A实现接口B;A建立对象a;B声明变量b;b=a;java
教材学习中的问题和解决过程
- 问题1:在书里的程序里看到了一个
类名.intValue()
,不懂这是什么意思。
- 问题1解决方案:上网查了一下,在这个连接里发现了解决的方法。
问题2:在写第五章的课后习题的时候,发现了这样一个问题。
git
问题2解决方案:在写这个程序的时候,我忽略了不能直接使用空对象,修改程序时改错了地方,致使了这个结果。因而我进入程序,把主函数的程序恢复原来的样子,而后在

这个函数里面对返回值直接进行了输出,解决了问题。编程
代码调试中的问题和解决过程

上周考试错题总结
- 错题1:15&250的值为? 这道题答案错了。我算出来是10,同窗们也是,可是答案里没有这个选项。
- 错题2:float x = 0.f;double y = 0.5,则x==y的结果为flase。这道题娄老师在课下给了我很好的解答,让我知道了浮点类型的编码方式。
- 错题3:byte b=byte(-150),则b的值为106。这是正确的。错误缘由是我错把byte的范围记成了-256~255..应该是-128~127。
- 错题4:课本P23程序在命令行运行时,输入ctrl+c能够结束阻塞。这是正确的。
- 错题5:'\ucafe'是正确的char型变量声明。\u表示16进制,cafe我把它错觉得是字符串。。
- 错题6:char str[] = " hello"是错误的初始化语句。由于hello是string型。
- 错题7:复制数组不能使用“=”。
- 错题8:P29的程序所用的是选择排序法,不是冒泡排序法,这道题答案也错了。
- 错题9:变量赋值boolean a = = false是不对的。错题缘由:没注意审题,忽略了是两个“=”。
我发现这周的错题除了两道题是答案错了之外,其余好几道题都是本身太粗心才错的。。审题不够细心。
其余
不得不说,这周我又发现了娄老师“考试就是一种学习”这句话的正确性。不管是线上蓝墨云里的测试,仍是线下课堂上的测试,都让我有很大的收获。由于对于咱们的教材,若是顺着它有耐心、专心地看下来,跟着敲一敲代码,写一写博客,实际上是不会遇到什么问题的。这时候若是没有测试,咱们就不能发现本身的问题(由于书里的教材只是一部分,更关键的是看本身能不能经过教材的学习作到触类旁通,而测试能够帮咱们看到这些)。
基于测试,我也可以提出一些本身真正不会、不懂的问题,而这些问题在老师、同窗们的解答下,使我印象深入, 学习也就事倍功半。
另外一方面,我发现了一个本身的不足。就是在时间紧张的时候编程序,编出来的程序格式比较乱,没有美感。这在咱们本周的课上测验上就暴露了出来。之后需对这个问题进行改正。学习
学习进度条
目标 |
5000行 |
30篇 |
400小时 |
|
第一周 |
36/36 |
1/1 |
8/8 |
|
第二周 |
432/468 |
2/3 |
15/23 |
|
第三周 |
964/1432 |
1/4 |
16/39 |
|
第四周 |
725/2157 |
1/5 |
14/53 |
|
计划学习时间:15小时测试
实际学习时间:14小时编码
改进状况:效率有所提升,提早完成任务。url