java编程思想读书笔记----第七章 复用类

1、组合

  将对象引用置于新的类中即可。
  类中域为基本类型时会被自动初始化为0,但对象引用会被初始化为null,而且如果你试图为它们调用任何方法,都会产生一个异常。
  如果想初始化这些引用,可以在代码中的下列位置进行。

  1. 在定义对象的地方,这意味着它们总能在构造器被调用前初始化。
  2. 在类的构造器中。
  3. 在正要使用这些对象之前,这种方式称为惰性初始化。在生产对象不值得以及不必每次都生产对象的前提下,这样可以减少不必要的负担。
  4. 实例初始化。

2、继承

  当创建一个导出类对象的时候,该对象包含了一个基类的子对象,该子对象和通过基类直接创建的对象是一样的。二者的区别是后者来自于外部,而基类的子对象被包装在导出类对象的内部。
  对基类子对象的初始化是很重要的,有且只有一种方法来保证这一点:调在构造器中调用基类初始化来执行。这一步必须要在放在导出类的第一步。
  如果java的基类中拥有某个已经被重载多次的方法名称,那么在导出类中重新定义改方法名称是可以的。因此,无论是在基类还是导出类中,方法的重载机制都可以正常使用。@Override可以防止你在覆写时不小心进行了重载。

3、代理

  我们将成员对象置于所要构建的类中(就像组合),同时在新类中暴露该成员对象的所有方法(就像继承)。

4、组合与继承的选择

  组合和继承都允许在新的类中放置子对象,组合是显示的做,而继承则是隐式的做。组合技术通常用于想在新类中实现现有类的功能而非它的接口的情形。即,在新类中嵌入某个对象,实现它的功能,展示给客户端程序员的是为新类定义的接口,而非所嵌入对象的接口。为取得此效果,需在新类中嵌入一个现有类的private对象。在继承的时候,使用一个通用类,将其特殊化一个新类。“is-a”(是一个)用继承关系表达,“has-a”(有一个)用组合关系表达。

5、final关键字

Final有三种使用情况:数据,方法和类。
Final数据
  final向编译器告知一块数据是永远不变的。比如:一个永不改变的编译时常量;一个在运行是初始化的值,而你不希望它被改变。
  对于编译时常量这种情况,在java中,必须是基本数据类型,且定义时必须对其赋值。
  对于基本类型,final使其值不变;而对于对象引用,final使其引用不变。一旦引用被初始化指向一个对象,就无法改变其指向另一个对象,但是对象其自身是可以被修改的。这一限制同样适用于数组。
  根据惯例,既是final又是static的域(即编译期常量)将用大写表示,并用下划线分开各单词。
  Final允许生产“空白final”,但此时必须要在构造器内初始化该final。这样更灵活。
  Java允许在参数列表中以声明的方式将参数指定为final,这意味着你无法在方法中改变参数引用所指向的对象。这一特性主要向匿名内部类传递参数。
Final方法
  将方法锁定,防止任何继承类修改它的含义。出于设计的考虑,确保在继承类中保持行为不变,并且不会被覆盖。
  类中所有的private方法都隐式地指定为是final的。由于无法取得private方法,自然也无法覆盖。覆盖只有在某方法是基类的接口的一部分才会出现,如果某方法是private的,自然也就不是接口的一部分。在导出类中以相同的名称生产一个不同权限的方法的话,仅是生成一个新方法,并没有覆盖。
Final类
  当某个类整体定义为final时,意味着你不会继承该类,也不允许别人继承该类。

静态初始化总是在类加载时便被执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值