第6章 重复运用class
Final
1. final data
l 永远不变,编译期常量(compile-time constant)
l 可以在执行期(run-time)初始化,然后不再改变
Blank finals :保证每个对象的final属性有所不同,但依旧保持不变。
(注:使用前必须初始化)
2. final arguments
l 无法在函数中将该引数(一个reference)改指他处
3. final methods
l 锁住这个函数是子类无法复写(overriding)
l 提高效率采用行内(inline)调用
final 与 private:所有private函数自然是final,因此不能覆写。但是子类可以出现同名
同参函数,与父类的该同名同参private函数无关。
例:(T213 FinalOverridingIllusion)
4. final classes
l 禁止继承(inheritance)
第7章 多态
Abstract
State Design Pattern
l 获得执行期的动态弹性
l 设计准则:继承表达行为上的差异,组合表达状态上的差异。
例:(T241 Transmogrify)
Pure Inheritance VS. Extension
l is-like-a derived class 像是一个 base class
l 缺点:想上转型后无法调用新增的函数
downcasting 与 run-time type identifyication
第8章 接口与内隐类
Interface(接口)
l 属性:
1. 都为public final static(修饰符可以省略),除了这些不能用其他修饰
2. 必须显性用=赋值
l 方法:
1. 都为public abstract (修饰符可以省略), 除了这些不能用其他修饰
2. 实现接口的类里与接口同名的函数必须为public
l 类可以implements实现多个接口
l 接口用extends继承接口,并且可以一次继承多个接口
嵌套的(nesting)interfaces
例:T257NestingInterfaces
Inner class(内隐类)
l 定义:将某个class置与另一个class之中
l 位于class里的inner class
1. 外界class引用inner class的方式:OuterClassName.InnerClassName指定该对象的型别
2. Inner class & upcasting
注:对于外界来说”private inner class”是不可见的,但是它实现了接口,所以可以通
过接口类型做向上转型,调用接口里所定义的函数(其他扩展函数无权访问)
l 位于methods和scopes之内的inner class
1. 范围之外不可以访问该类
l Anonymous(匿名) inner class
1. 语法:return new BasecCassName(arguments){body;};
2. 实质:产生了一个继承BaseClass的DerivedClass(为匿名类), 后又upcasting返回
BaseClass
3. 带引数:return new BasecCassName(arguments){body;};
4. 无构造函数
5. 问题:anonymous inner class 要调用外面的对象,该对象必须用final修饰
6. 问题:对于这个匿名内隐类的BaseClass的访问控制权限是什么?(public package)
l inner class中不能定义static段
l inner class里面不能定义没有final修饰子修饰的static变量
第九章 持有你的对象
Arrays(数组)
l Array简单的线性序列,元素可以被快速的访问,效率高,但是不可以改变容量
l Array持有特定的型别,防止将不正确的型别置入arrays
返回一个array
(T295 IceCream)
Arrays class :java.util
包含四个static基本函数:equals() fill() sort() binarySearch()
asList()函数:把array转换为List容器
array的充填
(T306 FillingArrays)
array的复制
(T307 CopingArrays)
arrays的比较
(T309 ComparingArrays)
arrays元素的比较
(T310 CompTpye)
array的排序
(T312 StringSorting)
在已排序的array中进行查找
(T313 ArraySearching)