*****學習對象組合一定要記住:一個類聲明的兩個對象如果具有相同的引用,則二者就具有完全相同的實體(變量);
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