組合是一種關聯類型,用來表示兩個物件之間的「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 依賴於另一個實體的存在。另外,可以說明依賴物件的存在是可選的。
當使用繼承來表示 2 個實體時,我們可以看到,只能存在 IS-A 關係。但如果兩個實體之間包含有關係,則需要聚合。聚合有 2 種不同類型:
這用來表示兩個實體以 HAS-A 關係存在,但其中一個實體的存在不依賴其他實體的關係。而且,它是一種單向類型的關聯。例如,銀行和員工是兩個實體,其中銀行的單一實體可以與多個員工相關;因此,銀行與員工之間存在一對多關係,但反之亦然。
這是當兩個實體之一在另一個容器實體中組成時使用的限制性關聯類型。如果沒有容器對象,組合實體就無法存在。但可以有一個空的組合實體。因此它被用來表示雙向的PART-OF關係;因此,兩個實體相互依賴。
由於組合用於實現兩個實體之間的 PART-OF 類型關係,因此一個實體被稱為容器,另一個實體被稱為組合實體。 組合實體就像一個完整的容器對象,有自己的屬性和操作,從而為它製作一個單獨的實體。這也有助於程式碼重複使用,因為此類可以作為組合實體在其他容器類別中使用。例如,Engine 是一個組合類,Car、TwooWheeler 等可以是它的容器類別。
由於組合類別是容器實體的一部分,因此兩者相互依賴。但是,組合類別仍然可以為空,例如汽車不需要強制具有引擎。這樣,組合類別就完全依賴容器類別的存在。另外,由於組合是類型關聯,因此 PART-OF 關係也被稱為 HAS-A 關係的子類。這樣,組合有助於在不使用繼承的情況下實現兩個相互依賴的實體之間的關係。
考慮由不同清單(例如辦公桌、會議室)組成的辦公室的情況。桌面物件進一步由電話物件組成,因為每張桌子都有一部桌上型電話。
代碼:
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); } }
代碼:
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(); } }
代碼:
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(); } }
代碼:
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 ); } }
代碼:
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中文網其他相關文章!