Java 中的組合
組合是一種關聯類型,用來表示兩個物件之間的「PART-OF」關係。 java中的組合是另一種關聯聚合的受限形式,其中「Has-a」關係中的兩個實體有自己的存在並且彼此不依賴。在組合中,一個實體包含在其他實體中,不能單獨存在。與用於表示 is-a 關係的繼承不同。
例如有兩個類別Car和Engine,Car是由一個引擎物件組成的,沒有Car就不存在引擎實體。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
文法:
class C1{ // A class represents the dependent entity } class C2{ //This class represents the entity that contains the dependent entity by declaring the object of the above class as one of its member variables. private C1 a; }
使用上述語法,我們能夠在上述兩個實體之間建立「isPart-Of」關係,其中 C1 依賴於另一個實體的存在。另外,可以說明依賴物件的存在是可選的。
為什麼我們需要 Java 組合?
當使用繼承來表示 2 個實體時,我們可以看到,只能存在 IS-A 關係。但如果兩個實體之間包含有關係,則需要聚合。聚合有 2 種不同類型:
1。協會
這用來表示兩個實體以 HAS-A 關係存在,但其中一個實體的存在不依賴其他實體的關係。而且,它是一種單向類型的關聯。例如,銀行和員工是兩個實體,其中銀行的單一實體可以與多個員工相關;因此,銀行與員工之間存在一對多關係,但反之亦然。
2。成分
這是當兩個實體之一在另一個容器實體中組成時使用的限制性關聯類型。如果沒有容器對象,組合實體就無法存在。但可以有一個空的組合實體。因此它被用來表示雙向的PART-OF關係;因此,兩個實體相互依賴。
組合在 Java 中如何運作?
由於組合用於實現兩個實體之間的 PART-OF 類型關係,因此一個實體被稱為容器,另一個實體被稱為組合實體。 組合實體就像一個完整的容器對象,有自己的屬性和操作,從而為它製作一個單獨的實體。這也有助於程式碼重複使用,因為此類可以作為組合實體在其他容器類別中使用。例如,Engine 是一個組合類,Car、TwooWheeler 等可以是它的容器類別。
由於組合類別是容器實體的一部分,因此兩者相互依賴。但是,組合類別仍然可以為空,例如汽車不需要強制具有引擎。這樣,組合類別就完全依賴容器類別的存在。另外,由於組合是類型關聯,因此 PART-OF 關係也被稱為 HAS-A 關係的子類。這樣,組合有助於在不使用繼承的情況下實現兩個相互依賴的實體之間的關係。
用 Java 實作組合的範例
考慮由不同清單(例如辦公桌、會議室)組成的辦公室的情況。桌面物件進一步由電話物件組成,因為每張桌子都有一部桌上型電話。
電話.Java
代碼:
package Try; public class Phone { private String Model; private String contactNum; Phone (String model, String num){ this.Model=model; this.contactNum=num; } public void getPhoneDetails(){ System.out.println("Phone Model "+ this.Model); System.out.println("Desk Number " + this.contactNum); } }
Desk.Java
代碼:
package Try; public class Desk { private String id; private String Mid; private Phone deskNum; private String personName; Desk(String id,String mid,Phone contact,String name){ this.id=id; this.Mid = mid; this.deskNum=contact; this.personName=name; } public void getDeskDetails(){ System.out.println("Desk Details :-"); System.out.println("Id " + this.id); System.out.println("Machine ID "+ this.Mid); System.out.println("Allocated To " + this.personName); this.deskNum.getPhoneDetails(); } }
會議室.Java
代碼:
package Try; public class MeetingRoom { private String name; private Phone contact; private String location; private int numChairs; private int numTables; MeetingRoom(String name,Phone contact,String location,int nChairs, int nTables){ this.name=name; this.contact=contact; this.location=location; this.numChairs=nChairs; this.numTables=nTables; } public void getMeetingRoomDetails(){ System.out.println("Meeting Room Details :-"); System.out.println("Name " +this.name); System.out.println("Location "+ this.location); System.out.println("Number OF Chairs " + this.numChairs); System.out.println("Number OF Tables "+this.numTables); contact.getPhoneDetails(); } }
Office.java
代碼:
package Try; import java.util.List; public class Office { private String offcName; private List<Desk> deskList; private List<MeetingRoom> roomList; private int pantryNum; public Office(String name , List<Desk> dList, List<MeetingRoom> mList,int pnum){ this.offcName = name; this.deskList = dList; this.roomList = mList; this.pantryNum =pnum; } public void getDetails(){ System.out.println("Below are details of "+ offcName +"Office"); for(Desk a:deskList){ a.getDeskDetails(); } for(MeetingRoom m:roomList){ m.getMeetingRoomDetails(); } System.out.println("Number Of pantry " + pantryNum ); } }
示範.Java
代碼:
package Try; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.ArrayList; import java.util.List; public class Demo extends Frame { public static void main(String[] args){ List<Desk> dList =new ArrayList<Desk>(); List<MeetingRoom> mList =new ArrayList<MeetingRoom>(); Phone p1=new Phone("NOTOROLA","12346"); Phone p2=new Phone("NOTOROLA","35235"); Phone p3=new Phone("BSNL","23233"); Phone p4=new Phone("BSNL","123346"); Desk d1 =new Desk("S121","M12",p1,"Tom"); Desk d2 =new Desk("S122","M14",p2,"Pam"); dList.add(d1); dList.add(d2); MeetingRoom m1=new MeetingRoom("Kurukshetra",p3,"Floor_10",10, 2); MeetingRoom m2=new MeetingRoom("Karnal",p4,"Floor_9",20, 3); mList.add(m1); mList.add(m2); Office o1= new Office("Banglore" , dList, mList,20); o1.getDetails(); } }
輸出:
說明: 在上面的程式中,Office 物件由 Desks 和 Meeting Room 實體清單組成,其中 Desk 和 Meeting room 又由 Phone 實體組成。在這裡,電話始終與辦公桌或會議室對象相關,因此不存在。此外,會議室和辦公桌也依賴 Office 物件。這裡的 Single Phone 類別可以用作辦公桌和會議室中的組合實體,從而有助於實現程式碼的可重複使用性。
結論
它是一種限制性聚合類型,用於實現具有雙向關係的兩個實體之間的 PART-OF 關係,並且具有在沒有容器實體的情況下不存在的組合實體。這是有益的,因為在組合類別中所做的任何更改都不會影響其餘程式碼和程式碼重複使用。
以上是Java 中的組合的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。

typetraits在C 中用於編譯時類型檢查和操作,提升代碼的靈活性和類型安全性。 1)通過std::is_integral和std::is_floating_point等進行類型判斷,實現高效的類型檢查和輸出。 2)使用std::is_trivially_copyable優化vector拷貝,根據類型選擇不同的拷貝策略。 3)注意編譯時決策、類型安全、性能優化和代碼複雜性,合理使用typetraits可以大大提升代碼質量。

在MySQL中配置字符集和排序規則的方法包括:1.設置服務器級別的字符集和排序規則:SETNAMES'utf8';SETCHARACTERSETutf8;SETCOLLATION_CONNECTION='utf8_general_ci';2.創建使用特定字符集和排序規則的數據庫:CREATEDATABASEexample_dbCHARACTERSETutf8COLLATEutf8_general_ci;3.創建表時指定字符集和排序規則:CREATETABLEexample_table(idINT

MySQL中重命名數據庫需要通過間接方法實現。步驟如下:1.創建新數據庫;2.使用mysqldump導出舊數據庫;3.將數據導入新數據庫;4.刪除舊數據庫。

在C 中實現單例模式可以通過靜態成員變量和靜態成員函數來確保類只有一個實例。具體步驟包括:1.使用私有構造函數和刪除拷貝構造函數及賦值操作符,防止外部直接實例化。 2.通過靜態方法getInstance提供全局訪問點,確保只創建一個實例。 3.為了線程安全,可以使用雙重檢查鎖定模式。 4.使用智能指針如std::shared_ptr來避免內存洩漏。 5.對於高性能需求,可以使用靜態局部變量實現。需要注意的是,單例模式可能導致全局狀態的濫用,建議謹慎使用並考慮替代方案。

Java代碼可以在不同操作系統上無需修改即可運行,這是因為Java的“一次編寫,到處運行”哲學,由Java虛擬機(JVM)實現。 JVM作為編譯後的Java字節碼與操作系統之間的中介,將字節碼翻譯成特定機器指令,確保程序在任何安裝了JVM的平台上都能獨立運行。
