组合是重用类代码的一种形式,组合是指使用已有的类类型的对象来定义新的类的过程。一般来说,上述对象会被作为新的类的字段,被称为对象字段。被定义的新的类中除包含对象字段外,还可以像普通的类一样包含普通的基本数据类型的字段,这些字段统称为非对象字段。对于对象字段本身和非 对象字段的访问与普通类的字段成员的访问相同,但是最特殊的地方在于,对象字段的下级成员在权限充分的情况下也是可以访问的,访问方法为:组合类对象名.对象字段名.下级成员名。组合类也可以创建对象作为对象字段去创建新的组合类,称为多级封装
同普通字段一样,我们也可以对对象字段规定访问权限,称为二次封装。 二次封装与普通封装方法及内容相同,都是对字段的访问权限作出限制,都具有四种访问权限:private权限、protect权限、默认权限、public权限,对应意义也相同,分别为:private权限:类内可见,protect权限:当前类内或子类内可见,默认权限:包内可见,公有权限:全部可见。值得注意的是,对象类的权限和组合类的权限没有直接关系,在组合类内访问对象字段的成员时,会受到对象字段的权限约束,而与组合字段无关。因此,我们可以看出,从组合类的角度来说,权限的控制一般是单层的,无法传递。
构造方法: 组合类中字段成员可分为两种:基本数据类型的非对象字段和类类型的对象字段。组合类的构造方法(无参)就是为对象字段创建引用变量并将其初始化为空引用变量(未引用具体对象)。组合类需要在设计构造方法时考虑如何为对象字段创建对象。针对这个问题,我们有以下答案:为对象字段创建对象有四种方式:1、在构造方法中为对象字段创建对象,2、在定义对象字段时直接创建对象,3、向构造方法直接传递已经创建好的对象,4、直接引用其他组合类的对象字段
包装类: 可以对一个已有的类重新包装,包装类是组合类的一种应用,方法是用已有的类的对象作为对象字段构建一个新的组合类,同时进行调整或增强其功能。最典型的例子就是打包,打包是对基本数据类型的包装操作。我们知道,基本数据类型是没有方法和属性的。进行包装以后,我们可以将基本数据类型包装为引用数据类型,向其中添加属性和方法,实现对象化交互。 包装类对象的初始值均为空值。数值型包装类继承自Number类,字符型包装类继承自Object类。注意,Java中除float、double以外的基本数据类型的包装类均具有常量池,字符串类型也具有常量池。常量池是一种缓存机制,用于避免重复创建对象。但是,常量池只能在一定范围内使用。例如,有两个整型变量 Integer x和Integer y,如果对x,y赋相同的值,而且这个值处在区间[-128,127]内,那么x和y指向同一内存地址