Java對象組合與方法複用(黑盒複用)的關係、對象數組的使用

 

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章