20165228 2016-2017-2 《Java程序设计》第4周学习总结
教材学习内容总结
- 子类与继承
class 子类名 extends 父类名{
...
}
- 一个子类只能有一个父类,子类继承父类的属性与行为,并可增长其新的属性和行为。Object是全部类的祖先类,若一个类声明中未使用extends关键词,则默认是Object的子类。习惯称子类与父类的关系为"is-a"关系
- 子类的继承性
- 当子类和父类在同一个包中时,那么子类继承其父类中不是private的成员变量(方法)做为本身的成员变量(方法)
- 当子类和父类不在同一个包中时,子类只继承父类中的protected和public访问权限的成员变量做为子类的成员变量。一样,子类只继承父类的protected和public访问权限的方法做为子类的方法
- 关于protected的说明:一个类中的protected的成员变量和方法能够被它的子孙类继承。
- 若是用D类再D自己建立一个对象,那么该对象老是能够经过"."运算符访问继承的或本身定义的protected变量及方法。
- 若是在另外一个类中,例如在Other类中用D类建立一个对象object,该对象经过"."运算符访问protected变量及方法时,对于子类D本身声明的protected成员变量和方法,只要Other类和D类在同一个包中,object对象就能够访问这些protected成员变量和方法。对于子类D从父类继承的protected成员变量和方法,只要Other类和这些protected成员变量和方法所在的祖先类在同一个包中,object类对象能访问继承的protected变量和方法
- 子类与对象
- 子类不继承父类的私有成员变量
- 子类与父类不在同一个包中,子类不继承父类的友好成员变量
- instanceof运算符是Java独有的双目运算符,其左边的操做元是对象,右边的操做元是类。当左边的操做元是右边的类或其子类所建立的对象时,运算结果是true,不然是false
- 成员变量的隐藏和方法重写
- 子类声明的成员变量名字和从父类继承而来的成员变量的名字相同时,子类就会隐藏所继承的成员变量
- 子类隐藏继承的的成员变量的特色:
子类对象以及子类本身定义的方法操做与父类同名的成员变量是指子类从新声明的这个成员变量
子类继承的方法所操做的成员变狼必定是被子类继承或隐藏的成员变量
- 子类继承的方法只能操做子类继承和隐藏的成员变量。子类新定义的方法能够操做子类继承和子类新声明的成员变量,但没法操做子类隐藏的成员变量(需使用super)
- 方法重写(方法覆盖):子类能够经过重写能够隐藏已继承的方法。指子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,而且方法的名字、参数个数、参数类型和父类的方法彻底相同
- 若是子类能够继承父类的某个方法,那子类就有权利重写这个方法。
- 重写目的:把父类的状态和行为改变为自身的状态和行为
- 重写方法既能够操做继承的成员变量、调用继承的方法,也能够操做子类新声明的成员变量、调用新定义的其余方法,但没法操做被子类隐藏的成员变量和方法(需使用关键词super)
- 重写注意事项:重写父类方法时,不容许下降方法的访问权限,但能够提升权限
访问权限从高到底的排列顺序:public、protected、友好的、private
- super的使用
- 子类一旦隐藏了继承的成员变量(方法),那么子类建立的对象再也不拥有该变量(不能调用该方法),该变量(该方法的调用权)归关键词super全部。
- 若是子类想使用被子类隐藏的成员变量和方法
访问和调用被子类隐藏的变量x:
```
super.x
访问和调用被子类隐藏的方法play():
super.play()
```
- final关键字
- final关键字可修饰类、成员变量和方法中的局部变量
- final类:使用final声明,不可继承也不能有子类
final class A {
...
}
- final方法:修饰父类中的一个方法时,这个方法不容许子类重写。不容许子类隐藏能够继承的final方法
- 常量
- 成员变量或局部变量被修饰为final时,它就是常量,在声明时无默认值。因此要求再声明常量时指定它的值
- abstract类和abstract方法
abstract class A { ... }
abstract int min(int x,int y);
- 对于abstract方法,只容许声明,不容许实现(没有方法体),不容许使用final(及static)和abstract同时秀是一个方法和类。即abstract方法必须是实例方法
- abstract类只关心操做,而不关心细节
- abstract类中能够有abstract方法,也能够有非abstract方法(能够没有abstract方法)
- abstract类不能用new运算符建立对象
- 接口
- 使用interface来定义一个接口,接口定义包括接口声明和接口体
```
interface 接口名 {
常量声明+抽象方法(访问权限必定是public)
}
- interface前面加上public,则这个public接口能够被任何一个类实现。若是不加public,则称做友好接口,只能被与该接口在同一个包中的类实现
- 接口可被继承,可经过extends声明一个接口是另外一个接口的自接口。因为接口中的方法和常量都是public类,子接口将继承父接口的所有方法和常量
- 接口属于引用型变量,接口变量中能够存放实现该接口的类的实例的引用,即存放对象的引用
- 接口回调:把实现某一接口的类建立的对象的引用赋值给该接口声明的接口变量,那么该接口变量就能够调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口方法时,就是通知相应的对象调用这个方法
- 接口参数:若是准备给一个方法的参数传递一个数值,可能但愿该方法的参数的类型是double型,这样就能向该参数传递byte、int、long、float和double型数据
- 若是一个方法的参数是接口类型,能够将任何实现该接口的类的实例的引用传递给该接口参数
- abstract类与接口的比较:
- 问题1:如何将对象的上转型对象强制转换到一个子类对象?
- 问题1解决方案:还未解决,虽然百度过这个问题,可是仍然没有明白如何操做
- 问题2:this能够访问被隐藏的变量和方法,和super的区别是什么?
- 问题2解决方案:经过搜索资料,大概以下:
不一样点:
一、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用
二、super()主要是在继承了父类的子类的构造函数中使用,是在不一样类中的使用;this()主要是在同一类的不一样构造函数中的使用
相同点:
一、super()和this()都必须在构造函数的第一行进行调用,不然就是错误的
- 问题3:使用IDEA调试带中文的程序时,会提示“不可映射的GBK字符”
问题3解决方案:Setting->File Encodings->IDE Encoding选择utf-8,不要选择“system default”
同时,Default encoding for properties files 也选择 UTF-8git
代码调试中的问题和解决过程
- 问题1:运行Example5_8时提示“非法字符:’\u3008’”
问题1解决方案:写代码时,输入法的全半角问题,切换到英文输入法,把报错行从新输入便可函数

(statistics.sh脚本的运行结果截图)学习
上周考试错题总结
目标 |
5000行 |
25篇 |
400小时 |
|
第一周 |
235/235 |
1/1 |
15/15 |
|
第二周 |
224/459 |
2/3 |
15/30 |
|
第三周 |
443/902 |
1/4 |
15/73 |
|
第四周 |
577/1479 |
2/6 |
17/90 |
|
计划学习时间:20小时调试
实际学习时间:17小时code