Java编程思想第四版读书笔记——第七章 复用类
2016-06-20 12:13
323 查看
第七章 复用类
1 组合语法
在类中,创建一个其它类的对象,使用该对象的一些方法,对这个对象进行操作。类中域为基本类型时能自动被初始化为0,对象引用会被初始化为Null。
初始化类中的引用,可以在四种情况下进行:
1、在定义对象的地方(在类的构造器调用之前就初始化了)
2、在类的构造器中
3、在需要使用这些对象之前(惰性初始化)
4、使用实例初始化
2 继承语法
当创建一个导出类对象时,该对象包含了一个基类子对象。当初始化时,构造器的调用遵循由内到外的顺序,默认情况下调用基类的无参构造器,基类构造器都有参时,可以用super(“参数”)显式的调用基类构造器。3 代理
当一个类并不是另一个类的子类型,却要完全或部分用到另一个类的全部方法时,可以用代理。在类Ship中创建另一个类的对象controls,然后构造所需要的全部方法,在方法里只需要使用相应的controls.方法。即可使用对象类的所有方法。
4 结合使用组合和继承
虽然编译器强制初始化基类,但是不强制初始化成员对象,所有在用组合的时候应该注意要自己初始化成员对象。可以使用try finally强制对内存进行回收清理,自己编写函数回收内存,此时回收顺序是由外向内,最后使用super.dispose()回收基类内存。
Java中导出类重载某个基类方法,它并不会屏蔽其在基类中的任何版本,也就是在参数列表类型符合的情况下,基类中的该方法依旧可用。
@override是覆写关键字,如果添加这个注解而错误的重载(没有覆写)该方法,那么编译器会报错。
覆写(override):函数名一样,返回值类型,参数列表类型都一样。子类函数的访问权限不能小于父类。
重载(overlode):函数名一样,参数列表不一样,返回值类型可以相同也可以不同。
以上两种都是程序多态性的体现。
5 在组合和继承之间选择
is-a 继承hsa -a 组合
6 protected关键字
关键字protected表明,就类用户而言,它是private的,就 继承自此类的导出类 或者 其它位于同一个包的类来说,它是可以访问的。最好将域保持为private的,保留更改底层实现的权利。然后通过protected方法控制类的继承者的访问权限。
7 向上转型
将导出类转型成基类,继承要慎用,需要向上转型时,推荐使用继承。8 final关键字
final数据:对于基本类型,final使数值恒定不变。对于对象的引用,final使引用恒定不变,但是对象自身是可以修改的。注意,数组也是一种引用。
带有恒定初值(即:编译期常量)的final static 基本类型全用大写命名,并且字与字之间用下划线隔开。
必须在域的定义处或者构造器中用表达式对final进行赋值,这真是final域在使用前总是初始化的原因。
final参数:
在函数参数列表中的final参数,在函数内无法修改它。如
f(int i){ i++; } //非法
g(phone mi){mi = new phone();} //非法
final方法:
使用场景:
1、把方法锁定,防止继承类修改,覆盖它。
2、提高效率。(逐渐淘汰)
类中所有的private方法都隐式地指定为final的。因为private方法无法被外界取用,所以并不算基类接口的一部分,所以尽管导出类含有相同名称的方法,但是互不干扰,也没有覆盖。
final类:
使用场景:
不可以作为基类被继承。
9 初始化及类的加载
类的代码在初次使用时才会被加载,通常是指加载发生在创建类的第一个对象之时,在访问static域或static方法时,也会发生加载。注意,只要加载包含static方法的类,static初始化就会执行。注意子类创建对象调用构造器时基类构造器也会被调用,此时基类会被加载,基类的static将会被初始化。
基类staitic——> 子类static——> 基本类型设为默认值0,对象引用被设为Null——> 基类构造器——>子类构造器
10 总结
优先组合,再考虑继承。相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序