เราได้พยายามที่จะกำหนดชั้นเรียน การกำหนดคลาสกำลังสร้างประเภทใหม่ เมื่อคลาสเข้าที่แล้ว เราจะสร้างอ็อบเจ็กต์ประเภทที่สอดคล้องกัน นอกจากนี้แต่ละประเภทควรมีอินเทอร์เฟซที่ชัดเจนให้ผู้ใช้ใช้งานได้
เราสามารถใช้อ็อบเจ็กต์อื่นในคำจำกัดความของคลาสใหม่ได้ นี่คือองค์ประกอบ การรวมกันเป็นหนึ่งในวิธีการพื้นฐานเพื่อให้โปรแกรมสามารถนำกลับมาใช้ใหม่ใน Java ได้
ผสมกับ "has-a"
วัตถุหนึ่งเป็นสมาชิกข้อมูลของวัตถุอื่น ตัวอย่างเช่น มาดูตัวอย่างไฟฉายแบบชาร์จไฟได้ดังที่กล่าวไว้ข้างต้น:
แบตเตอรี่ ไฟ LED ปุ่ม... ในไฟฉายแบบชาร์จไฟได้ ทั้งหมดสามารถเป็นวัตถุได้ เราสามารถกำหนดคลาสแบตเตอรี่เพื่อกำหนดและสร้างวัตถุแบตเตอรี่ได้ ในคำจำกัดความระดับของไฟฉายแบบชาร์จไฟได้ วัตถุแบตเตอรี่สามารถใช้เป็นข้อมูลเพื่อแสดงสถานะของชิ้นส่วนแบตเตอรี่ได้
เรากำหนดคลาสแบตเตอรี่ด้านล่างและใช้พลังงานเพื่อแสดงพลังงาน แบตเตอรี่สามารถชาร์จได้ (chargeBattery) และใช้แล้ว (useBattery) เราใช้วัตถุประเภทแบตเตอรี่เป็นสมาชิกข้อมูลในคำจำกัดความคลาสคบเพลิงที่ตามมา:
คัดลอกรหัสรหัสดังต่อไปนี้:
คลาสแบตเตอรี่
-
โมฆะสาธารณะชาร์จแบตเตอรี่(pคู่)
-
ถ้า (this.power < 1.) {
this.power = this.power + p;
-
-
การใช้บูลีนสาธารณะแบตเตอรี่ (double p)
-
ถ้า (this.power >= p) {
this.power = this.power - p;
กลับเป็นจริง;
-
อื่น {
นี่.อำนาจ = 0.0;
กลับเท็จ;
-
-
พลังสองเท่าส่วนตัว = 0.0;
-
คลาสไฟฉาย
-
-
* กำลังไฟ 10% ต่อชั่วโมง
* เตือนเมื่อไฟดับ
-
โมฆะสาธารณะ TurnOn(int ชั่วโมง)
-
บูลีนใช้งานได้;
ใช้งานได้ = this.theBattery.useBattery (ชั่วโมง * 0.1 );
ถ้า (ใช้งานได้ != จริง) {
System.out.println("ใช้ไม่ได้แล้ว ต้องชาร์จ!");
-
-
-
* ชาร์จพลังงาน 20% ต่อชั่วโมง
-
ค่าธรรมเนียมโมฆะสาธารณะ (int ชั่วโมง)
-
นี้. theBattery.chargeBattery (ชั่วโมง * 0.2 );
-
-
* องค์ประกอบ
-
แบตเตอรี่ส่วนตัว theBattery = แบตเตอรี่ใหม่ ();
-
ใหม่ข้างต้นจัดสรรหน่วยความจำสำหรับวัตถุแบตเตอรี่และเป็นสิ่งที่ขาดไม่ได้
เรากำหนดคลาสแบตเตอรี่ คลาสคบเพลิงใช้วัตถุประเภทแบตเตอรี่ (theBattery) เป็นสมาชิกข้อมูล ในวิธีการของ Torch เราใช้ฟังก์ชันการทำงาน (ฟังก์ชันการทำงาน) ที่ได้รับจากคลาส Battery โดยการจัดการอินเทอร์เฟซของวัตถุ Battery
เราบอกว่าวัตถุคบเพลิงมี (มี) วัตถุแบตเตอรี่ ความสัมพันธ์ข้างต้นสามารถแสดงเป็น:
มี: ไฟฉายมีแบตเตอรี่ (สังเกตการเชื่อมต่อรูปเพชรด้านบน)
ด้วยการรวมกัน เราสามารถนำรหัสที่เกี่ยวข้องกับแบตเตอรี่กลับมาใช้ใหม่ได้ หากเรามีคลาสอื่นที่ใช้แบตเตอรี่ เช่น โทรศัพท์มือถือและเครื่องคิดเลข เราก็สามารถรวมวัตถุแบตเตอรี่เข้าด้วยกันได้ ซึ่งช่วยลดความจำเป็นในการเขียนฟังก์ชันที่เกี่ยวข้องแยกกันสำหรับแต่ละคลาส
เราสามารถเพิ่มคลาส Test เพื่อดูเอฟเฟกต์จริงได้:
คัดลอกรหัสรหัสดังต่อไปนี้:
การทดสอบในชั้นเรียนสาธารณะ
-
โมฆะสาธารณะคง main (String [] args)
-
คบเพลิง aTorch = คบเพลิงใหม่ ();
System.out.println("ชาร์จ: 2 ชั่วโมง");
aTorch.ชาร์จ(2);
System.out.println("เปิดเครื่องครั้งแรก: 3 ชั่วโมง");
aTorch.turnOn(3);
System.out.println("เปิดครั้งที่สอง: 3 ชั่วโมง");
aTorch.turnOn(3);
-
-
ผลลัพธ์ของการรันโปรแกรมข้างต้น:
ชาร์จ: 2 ชั่วโมง
เปิดครั้งแรก: 3 ชั่วโมง
เปิดครั้งที่สอง: 3 ชั่วโมง
ใช้ไม่ได้แล้วต้องชาร์จ!
เราใช้ฟังก์ชันที่ได้รับจากวัตถุแบตเตอรี่ผ่านการรวมกัน เช่น การตรวจจับว่าแบตเตอรี่หมดหรือไม่ (ขึ้นอยู่กับค่าที่ส่งคืนของ useBattery())
ประเภทพื้นฐาน
จาก HelloWorld ไปจนถึงเชิงวัตถุ เราเรียกประเภทพื้นฐานว่า int, float, double, boolean (ประเภทดั้งเดิม) ซึ่งเป็นคลาสพิเศษ เราสามารถเข้าใจจำนวนเต็มว่าเป็นวัตถุประเภท int ประเภท int สามารถมีส่วนต่อประสานการดำเนินการ เช่น การกำหนด การบวก และการลบ ประเภทสามัญถือได้ว่าเป็นส่วนขยายของประเภทพื้นฐาน เราได้เห็นประเภทดั้งเดิมเป็นสมาชิกข้อมูล พารามิเตอร์ของวิธีการ ค่าส่งคืนของวิธีการ และตัวแปรอัตโนมัติภายในวิธีการ วัตถุประเภทธรรมชาติทั่วไป เช่น วัตถุคลาสแบตเตอรี่และคบเพลิง สามารถใช้ในสถานที่เหล่านี้ได้เช่นกัน
ในภาษา C ประเภทข้อมูลที่ใช้ได้ (โดยทั่วไป) จะถูกตั้งค่าล่วงหน้า เช่น int และ float ใน Java นอกเหนือจากการใช้ประเภทข้อมูลที่กำหนดไว้ล่วงหน้าแล้ว เรายังปรับแต่งประเภทข้อมูลที่เราต้องการผ่านคลาสแล้วใช้ผ่านการรวมกันได้อีกด้วย แต่มีความแตกต่างระหว่างประเภทพื้นฐานและประเภทธรรมดา ประเภทพื้นฐานมักใช้และใช้พื้นที่หน่วยความจำจำนวนเล็กน้อย ดังนั้น เพื่อประสิทธิภาพ ประเภทพื้นฐานเหล่านี้จึงมีวิธีการจัดการหน่วยความจำที่แตกต่างจากประเภททั่วไป (นั่นคือ คลาสแบบกำหนดเอง) ตัวอย่างเช่น ประเภทพื้นฐานจะได้รับการจัดสรรพื้นที่หน่วยความจำเมื่อมีการประกาศ ในขณะที่ประเภททั่วไปจำเป็นต้องใช้คีย์เวิร์ดใหม่เพื่อจัดสรรพื้นที่หน่วยความจำ
Java มีประเภททั่วไปที่สอดคล้องกันสำหรับประเภทพื้นฐานแต่ละประเภท ตัวอย่างเช่น ประเภทพื้นฐาน int สอดคล้องกับประเภทจำนวนเต็ม หากวัตถุประเภทพื้นฐานถูกแปลงเป็นตัวแปรประเภททั่วไปที่สอดคล้องกัน สิ่งที่เรียกว่าประเภทพื้นฐานจะกลายเป็นประเภทในแง่ทั่วไป (ไม่มีความแตกต่างในการจัดการหน่วยความจำอีกต่อไป)
ด้วยวิธีนี้ เรามีความเข้าใจอย่างลึกซึ้งยิ่งขึ้นเกี่ยวกับแนวคิดของ Java ที่ว่า "ทุกสิ่งเป็นวัตถุ"
สรุป
การรวมกันมี-a
ประเภทพื้นฐาน