*****学习对象组合一定要记住:一个类声明的两个对象如果具有相同的引用,则二者就具有完全相同的实体(变量);
1、对象组合指:在一个类中的对象可以将其他类的对象作为自己的组成部分,这个过程就是对象的组合;
2、方法复用指:在完成对象的组合后,通过所组合的对象调用其类中的方法;
如下代码演示:
//对象组合指:在一个类中的对象可以将其他类的对象作为自己的组成部分,这个过程就是对象的组合;
//1、创建一个主类对象
//2、在主类中创建另一个类的空对象,用于对象的组合;
//3、求正方形面积:a的平方
public class Object_Compose {
//创建另一个类的对象,进行组合使用
object_co ocs ; //此时对象为空
//对需要组合的对象赋予引用,进而完成方法复用;
void set(object_co oc){
ocs = oc ;
}
//通过组合的对象 ocs,进行方法复用 getArea(),得到正方形的面积
double Area(){
return ocs.getArea();
}
public static void main(String[] args) {
//创建主类对象
Object_Compose OCS = new Object_Compose();
//创建副类对象,对需要组合的对象进行赋予引用
object_co o = new object_co();
OCS.set(o);
//设置边长的值
o.setArea(10);
//完成引用赋值,查看引用值
System.out.println(OCS.ocs);
//完成引用赋值后,进行方法复用,即委托组合的对象 ocs 进行方法调用
OCS.Area();
//输出面积
System.out.println("正方形的面积为:"+OCS.Area());
}
}
class object_co{
double sum,sideA;
//设置边长的值
double setArea (double side){
this.sideA = side;
return sideA;
}
//计算正方形面积
double getArea (){
this.sum = sideA * sideA ;
return sum ;
}
}
在以上代码中,
主类 Object_Compose 的对象 OCS 与副类 object_co 的对象 ocs 进行了组合,
并且 主对象 OCS 委托了组合的 对象 ocs 调用了方法 ocs.getArea(); 进行正方形面积的运算,
而调用方法的这一个过程就称为方法的复用;
以上代码输出:
Chapter_Four.object_co@7852e922
正方形的面积为:100.0
通过对象组合来复用方法有以下特点:
1、通过组合对象来复用方法也称为 " 黑盒 " 复用,
" 黑盒 " 复用的意思是:当前对象只能委托所包含的对象调用其方法,这样一来,当前对象对所包含的对象的方法细节(具体方法的执行过程)是不知道的;
例如以上代码演示中,
主类对象 OCS 组合了 副类对象 ocs ,并委托对象 ocs 调用其方法 getArea() ,但是对象OCS 对方法 getArea() 的执行过程是不知道的;
2、当前对象可以随时更换所包含(组合)的对象,即对象与所包含(组合)的对象属于弱耦合的关系;
对以上代码演示中,进一步演示:
//对象组合指:在一个类中的对象可以将其他类的对象作为自己的组成部分,这个过程就是对象的组合;
//1、创建一个主类对象
//2、在主类中创建另一个类的空对象,用于对象的组合;
//3、求正方形面积:a的平方
public class Object_Compose_Advanced {
//创建另一个类的对象,进行组合使用
object_cos ocs ; //此时对象为空
//对需要组合的对象赋予引用,进而完成方法复用;
void set(object_cos oc){
ocs = oc ;
}
//通过组合的对象 ocs,进行方法复用 getArea(),得到正方形的面积
double Area(){
return ocs.getArea();
}
public static void main(String[] args) {
//创建主类对象
Object_Compose_Advanced OCS = new Object_Compose_Advanced();
//创建副类对象,对需要组合的对象进行赋予引用
object_cos o = new object_cos();
OCS.set(o);
//设置边长的值
o.setArea(10);
//完成引用赋值,查看引用值
System.out.println(OCS.ocs);
//完成引用赋值后,进行方法复用,即委托组合的对象 ocs 进行方法调用
OCS.Area();
//输出面积
System.out.println("正方形的面积为:"+OCS.Area());
//继续创建副类对象,用于更换所组合对象的引用
object_cos ox = new object_cos();
OCS.set(ox);
//完成引用赋值,重新查看引用值,此时主类的对象所组合的副类对象 ocs的引用已经改变了;
//即完成了对象更换所包含(组合)的对象
System.out.println(OCS.ocs);
}
}
class object_cos{
double sum,sideA;
double setArea (double side){
this.sideA = side;
return sideA;
}
double getArea (){
this.sum = sideA * sideA ;
return sum ;
}
}
在代码中主类对象OCS 组合的副类对象ocs 的引用随时进行了更换,体现了对象与所包含(组合)的对象属于弱耦合的关系;
对象数组的定义 :
1、对象数组指:数组中元素类型是类创建的对象;
2、当类中需要创建多个类对象时,就可以通过对象数组进行快速创建了;
对象数组的声明 :
//第一种声明
Object_Array [] oa = new Object_Array[3];
//第二种声明
Object_Array [] oaa ;
oaa = new Object_Array[3];
需要注意的是,此时只是对象的声明,所以这些对象都是空对象,没有分配内存,需要进行对象创建,才能使用这些对象;
对象数组的创建与使用 :
如下代码演示:
public class Object_Array {
//成员变量
double test = 11.111;
public static void main(String[] args) {
//对象数组的声明
Object_Array [] oa = new Object_Array[3];
//对象数组的创建
oa[0] = new Object_Array();
oa[1] = new Object_Array();
//对象数组的使用
oa[0].test = 1.1;
oa[1].test = 11.11;
System.out.println(oa[0].test);
System.out.println(oa[1].test);
}
}
代码输出结果:
1.1
11.11
通过 for 循环快速创建对象数组 :
如下代码演示:
public class Object_Array {
int number;
public static void main(String[] args) {
//通过 for 循环快速创建对象数组
Object_Array [] oatest = new Object_Array[3];
for(int i=0 ; i<oatest.length;i++){
oatest[i] = new Object_Array();
oatest[i].number = 108 + i ;
System.out.println("每个对象对应的nunber值为:"+oatest[i].number);
System.out.println("每个对象对应的引用为:"+oatest[i]);
}
}
}
代码输出结果:每个对象对应的nunber值为:108
每个对象对应的引用为:Chapter_Four.Object_Array@7852e922
每个对象对应的nunber值为:109
每个对象对应的引用为:Chapter_Four.Object_Array@4e25154f
每个对象对应的nunber值为:110
每个对象对应的引用为:Chapter_Four.Object_Array@70dea4e