- 组合语法 将对象引用置于新类中即可.初始化组合对象的方式有
- 在定义处,可以保证在构造器执行前初始化
- 构造器中
- 惰性初始化,只在要使用时初始化
- 使用实例初始化
- 继承
继承时会自动获得父类所有的域和方法
基类初始化,基类构造器会在子类构造器调用之前调用,若是基类不存在无参数默认构造器,则需要通过super显式调用基类构造器
- 代理,使用方法暴露子对象的接口
确保正确清理
将清理方法放在final中,最好编写自己的清理方法,不要使用finalize()
名称屏蔽
子类会拥有所有父类的重载函数,切都可以调用
向上转型
子类可以向上转型变为基类,因为子类的接口一定大于等于基类
final关键字
指定数据不可变,若是修饰引用则表明引用指向的对象不能变,但是对象自身可以被修改
static的final常量只会在类加载时初始化一次
非static的final会在每次对象创建时初始化.
final的基本类型常量为编译时常量 会被编译器优化.
final参数指参数不可更改.空白final,可以不指定初始值,但一定要在使用前初始化,使其与对象绑定,同类的不同对象拥有不同的值.
final方法指 方法锁定不能被覆盖.java初期也会使用final方法进行效率优化,因为早期java实现中可能会将final方法的调用转为内嵌调用,但后来已经被废除,因为可能方法太大导致内嵌调用会带来效率下降的问题,新的hotspot技术会负责效率问题.
final类不可被继承,所有的方法隐式指定为final.
初始化及类的加载
java类的代码只有在初次使用时才会加载
类的初始化过程: 当运行某个类时,试图访问它的main方法,当发现有基类时会先加载基类.一直加载到最根部的基类,然后从根开始进行static初始化.到达本身后开始进行对象的创建,先是将对象内存全部设置为0,然后递归调用基类构造器,最后进行构造器剩余部分.
总结
继承复用的是接口,组合复用的是旧类.
除非你需要新的类可以向上转型,否则一般应优先使用组合.
每个类都应该有特定用途,不应该太大,如果一个类很大就要考虑将该类分成多个小类.
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">