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