สาระสำคัญของอินเทอร์เฟซ - อินเทอร์เฟซเป็นคลาสนามธรรมพิเศษที่มีเฉพาะคำจำกัดความของค่าคงที่และวิธีการเท่านั้น แต่ไม่ใช่การนำตัวแปรและวิธีการไปใช้
อินเทอร์เฟซอาจมีบางสิ่งที่คลาสนามธรรมมี หากเมธอดทั้งหมดในคลาสนามธรรมเป็นนามธรรม ก็ไม่จำเป็นต้องใช้เมธอดในคลาสนามธรรมนี้ และตัวแปรทั้งหมดในคลาสนามธรรมนี้เป็นตัวแปรคงที่ ล้วนเป็นตัวแปรที่ไม่สามารถทำได้ จะถูกเปลี่ยน (สุดท้าย) ในกรณีนี้ คลาสนามธรรมสามารถกำหนดเป็นอินเทอร์เฟซได้ รูปแบบสำหรับการกำหนดคลาสเป็นอินเทอร์เฟซคือการแทนที่คลาสคำหลักที่ประกาศคลาสด้วยอินเทอร์เฟซคำหลักที่ประกาศอินเทอร์เฟซ
อินเทอร์เฟซเป็นคลาสนามธรรมพิเศษ ในคลาสนามธรรมนี้ วิธีการทั้งหมดเป็นวิธีการนามธรรม และแอตทริบิวต์ (เช่น ตัวแปรสมาชิก) ของคลาสนามธรรมนี้จะถูกประกาศเป็น "ชื่อแอตทริบิวต์ประเภทสุดท้ายแบบคงที่สาธารณะ" ด้วยวิธีนี้ การประกาศเริ่มต้นคือ "public static Final" กล่าวคือ ตัวแปรสมาชิกภายในเป็นแบบสาธารณะ คงที่ และไม่สามารถเปลี่ยนแปลงได้ ดังนั้น เมื่อประกาศค่าคงที่ในอินเทอร์เฟซ จึงสามารถเขียนในรูปแบบของ "ชื่อคงที่ประเภทสุดท้ายคงที่สาธารณะ name=value(value)" หรือเขียนได้โดยตรงในรูปแบบของ "ประเภทค่าคงที่ name=value(value) )" เช่น: "public static Final int id =10" สามารถเขียนได้โดยตรงในรูปแบบของ "int id=10" เนื่องจากการประกาศคุณสมบัติเริ่มต้นในอินเทอร์เฟซนั้นเป็น "public static Final" ทั้งหมด ดังนั้น "public static Final" " สามารถละเว้นได้ วิธีการ abstract ที่ประกาศในอินเทอร์เฟซไม่จำเป็นต้องถูกทำเครื่องหมายด้วยคีย์เวิร์ด abstract เนื่องจากวิธีการทั้งหมดในอินเทอร์เฟซนั้นเป็น abstract ดังนั้นคีย์เวิร์ด "abstract" จะถูกละไว้ตามค่าเริ่มต้น ตัวอย่างเช่น หากคุณประกาศสามคำดังกล่าวในอินเทอร์เฟซ , วิธีการ: "public void start()", "public void run()", "public void "stop()" ไม่ได้ถูกระบุโดยคีย์เวิร์ด abstract ที่อยู่หน้าทั้งสามวิธีนี้ แต่เป็นวิธี abstract เนื่องจากวิธีที่ประกาศในอินเทอร์เฟซนั้นเป็นวิธี abstract ทั้งหมด ดังนั้นคีย์เวิร์ด abstract จะถูกละเว้นในวิธี abstract ใน อินเทอร์เฟซถูกทิ้ง เนื่องจากวิธีการที่ประกาศโดยค่าเริ่มต้นนั้นเป็นนามธรรม ดังนั้นจึงไม่จำเป็นต้องเขียนคำว่า "นามธรรม" สิ่งนี้แตกต่างจากเมื่อประกาศวิธีนามธรรมในคลาสนามธรรม เมื่อประกาศวิธีนามธรรมในคลาสนามธรรม คุณต้องใช้คีย์เวิร์ด "นามธรรม" และในอินเทอร์เฟซ คุณสามารถละเว้น " abstract" เมื่อประกาศวิธีการเชิงนามธรรม หมายเหตุ: วิธีการนามธรรมที่ประกาศในอินเทอร์เฟซคือ "สาธารณะ" ตามค่าเริ่มต้นและสามารถเป็น "สาธารณะ" ได้เท่านั้น เหตุผลที่ประกาศด้วยวิธีนี้คือเพื่อแก้ไขปัญหาที่เกิดขึ้นเมื่อมีการสืบทอดหลายครั้งใน C ++ ในภาษา C++ มีแนวโน้มที่จะเกิดปัญหา ปัญหาคือ หากคลาสพาเรนต์หลายคลาสที่มีตัวแปรสมาชิกเหมือนกัน จะค่อนข้างยุ่งยากในการอ้างอิง และปัญหาต่างๆ จะเกิดขึ้นระหว่างการดำเนินการ เพื่อแก้ไขปัญหานี้ JAVA ได้เปลี่ยนตัวแปรสมาชิกทั้งหมดในอินเทอร์เฟซเป็นแบบคงที่สุดท้าย หากตัวแปรสมาชิกเป็นแบบคงที่ ตัวแปรสมาชิกจะเป็นของทั้งคลาส แทนที่จะเป็นเอกสิทธิ์เฉพาะของออบเจ็กต์บางตัว สำหรับการสืบทอดหลายรายการ คลาสย่อยออบเจ็กต์จะมีออบเจ็กต์คลาสพาเรนต์หลายรายการ ในขณะที่สำหรับการสืบทอดเดี่ยว จะมีออบเจ็กต์คลาสพาเรนต์เพียงรายการเดียวในออบเจ็กต์คลาสย่อย วัตถุคลาสย่อยที่สืบทอดหลายวัตถุมีวัตถุคลาสแม่หลาย และอาจมีตัวแปรสมาชิกที่ซ้ำกันระหว่างวัตถุคลาสแม่เหล่านี้ ซึ่งมีแนวโน้มที่จะเกิดปัญหามาก ดังนั้น ปัญหานี้สามารถหลีกเลี่ยงได้ใน JAVA โดยใช้อินเทอร์เฟซเพื่อใช้การสืบทอดหลายรายการ ในฐานะอินเทอร์เฟซ คลาสสามารถสืบทอดจากอินเทอร์เฟซ (หรือใช้อินเทอร์เฟซ) นี่เป็นการสืบทอดหลายรายการในอินเทอร์เฟซไม่ได้จำกัดเฉพาะกับวัตถุบางตัว พวกมันล้วนเป็นตัวแปรสมาชิกแบบคงที่และอยู่ในคลาสทั้งหมด ดังนั้น มันไม่สำคัญว่าคลาสจะใช้หลายอินเทอร์เฟซหรือไม่ และจะไม่มีข้อขัดแย้งระหว่างอ็อบเจ็กต์ การใช้อินเทอร์เฟซหลายรายการยังช่วยให้ได้รับมรดกหลายรายการ และหลีกเลี่ยงปัญหาที่มีแนวโน้มที่จะเกิดการสืบทอดหลายรายการ นี่คือประโยชน์ของการใช้อินเทอร์เฟซเพื่อใช้การสืบทอดหลายรายการ
1. กำหนดอินเทอร์เฟซ
ใช้อินเทอร์เฟซเพื่อกำหนดอินเทอร์เฟซ คำจำกัดความของอินเทอร์เฟซคล้ายกับคำจำกัดความที่คล้ายกัน นอกจากนี้ยังแบ่งออกเป็นการประกาศอินเทอร์เฟซและเนื้อหาอินเทอร์เฟซประกอบด้วยสองส่วน: คำจำกัดความคงที่และคำจำกัดความของวิธีการ รูปแบบพื้นฐานสำหรับการกำหนดอินเทอร์เฟซมีดังนี้:
[ตัวแก้ไข] ชื่ออินเทอร์เฟซอินเทอร์เฟซ [ขยายรายการชื่ออินเทอร์เฟซหลัก]{
[สาธารณะ] [คงที่] [สุดท้าย] คงที่;
[สาธารณะ] [นามธรรม] วิธี;
-
ตัวแก้ไข: ทางเลือก ใช้เพื่อระบุสิทธิ์การเข้าถึงของอินเทอร์เฟซ ค่าทางเลือกจะเป็นสาธารณะ หากละเว้นจะใช้สิทธิ์การเข้าถึงเริ่มต้น
ชื่ออินเทอร์เฟซ: พารามิเตอร์ที่จำเป็น ซึ่งใช้เพื่อระบุชื่อของอินเทอร์เฟซ ชื่ออินเทอร์เฟซจะต้องเป็นตัวระบุ Java ตามกฎหมาย โดยทั่วไปจะต้องใช้อักษรตัวพิมพ์ใหญ่
ขยาย: รายการชื่ออินเทอร์เฟซหลัก: พารามิเตอร์ทางเลือก ใช้เพื่อระบุอินเทอร์เฟซหลักที่อินเทอร์เฟซที่จะกำหนดสืบทอดมา เมื่อใช้คีย์เวิร์ดขยาย ชื่ออินเทอร์เฟซหลักคือพารามิเตอร์ที่จำเป็น
วิธีการ: วิธีการในอินเทอร์เฟซได้รับการกำหนดไว้เท่านั้น แต่ไม่ได้นำไปใช้
ตัวอย่างเช่น กำหนดอินเทอร์เฟซสำหรับการคำนวณ ซึ่งมีการกำหนด PI คงที่และสองวิธี โค้ดเฉพาะมีดังนี้:
อินเทอร์เฟซสาธารณะ CalInterface { Final float PI=3.14159f;//กำหนด PI คงที่ที่ใช้แทน pi float getArea(float r);//กำหนดวิธีการคำนวณพื้นที่ getArea() float getCircumference(float r);// กำหนด a วิธีการคำนวณปริมณฑล getCircumference() }
สังเกต:
เช่นเดียวกับคลาสไฟล์ของ Java ชื่อไฟล์ของไฟล์อินเตอร์เฟสจะต้องเหมือนกับชื่ออินเตอร์เฟส
2. ใช้อินเทอร์เฟซ
หลังจากกำหนดอินเทอร์เฟซแล้ว ก็สามารถนำไปใช้ในคลาสได้ หากต้องการใช้อินเทอร์เฟซในคลาส คุณสามารถใช้คีย์เวิร์ด Implements และรูปแบบพื้นฐานจะเป็นดังนี้:
[ตัวแก้ไข] คลาส <ชื่อคลาส> [ขยายชื่อคลาสพาเรนต์] [ใช้รายการอินเทอร์เฟซ]{
-
-
ตัวแก้ไข: พารามิเตอร์ทางเลือก ใช้เพื่อระบุสิทธิ์การเข้าถึงของคลาส ค่าตัวเลือกคือสาธารณะ นามธรรม และสุดท้าย
ชื่อคลาส: พารามิเตอร์ที่จำเป็น ซึ่งใช้ในการระบุชื่อของคลาส ชื่อคลาสจะต้องเป็นตัวระบุ Java ตามกฎหมาย โดยทั่วไปจะต้องใช้อักษรตัวพิมพ์ใหญ่
ขยายชื่อคลาสพาเรนต์: พารามิเตอร์ทางเลือก ใช้เพื่อระบุคลาสพาเรนต์ที่คลาสที่จะกำหนดสืบทอดมา เมื่อใช้คีย์เวิร์ดขยาย ชื่อคลาสพาเรนต์เป็นพารามิเตอร์ที่จำเป็น
ใช้รายการอินเทอร์เฟซ: พารามิเตอร์ทางเลือกที่ใช้ในการระบุอินเทอร์เฟซที่คลาสนี้นำไปใช้ เมื่อใช้คีย์เวิร์ด Implements รายการอินเทอร์เฟซคือพารามิเตอร์ที่จำเป็น เมื่อมีชื่ออินเทอร์เฟซหลายชื่อในรายการอินเทอร์เฟซ ให้คั่นด้วยเครื่องหมายจุลภาค
เมื่อใช้อินเทอร์เฟซในคลาส ชื่อวิธีการ ประเภทค่าที่ส่งคืน หมายเลข และประเภทของพารามิเตอร์จะต้องเหมือนกันทุกประการกับที่อยู่ในอินเทอร์เฟซ และต้องใช้วิธีการทั้งหมดในอินเทอร์เฟซ ตัวอย่างเช่น เขียนคลาสชื่อ Cire ที่ใช้อินเทอร์เฟซ Calculate ที่กำหนดไว้ในส่วน 5.7.1 รหัสเฉพาะมีดังนี้:
คลาสสาธารณะ Cire ใช้ CalInterface { public float getArea(float r) { float area=PI*r*r;//คำนวณพื้นที่วงกลมและกำหนดให้กับพื้นที่ตัวแปร พื้นที่ส่งคืน;//คืนพื้นที่วงกลมที่คำนวณได้} public float getCircumference (float r) { float circumference=2*PI*r; // คำนวณเส้นรอบวงของวงกลมและกำหนดให้กับเส้นรอบวงของตัวแปรที่ส่งคืน; // ส่งคืนเส้นรอบวงที่คำนวณได้} public static void main (String [] args) { Cire c = ใหม่ Cire(); float f = c.getArea(2.0f); System.out.println(Float.toString(f) } }
ในการสืบทอดคลาส สามารถทำได้เพียงการสืบทอดเพียงครั้งเดียว แต่เมื่อใช้งานอินเทอร์เฟซ สามารถใช้งานหลายอินเทอร์เฟซได้ในคราวเดียว และแต่ละอินเทอร์เฟซจะถูกคั่นด้วยเครื่องหมายจุลภาค ","
ในเวลานี้ อาจเกิดการขัดแย้งของค่าคงที่หรือชื่อเมธอด (ในหลายอินเทอร์เฟซ) เมื่อแก้ไขปัญหานี้ หากค่าคงที่ขัดแย้งกัน คุณจะต้องระบุอินเทอร์เฟซของค่าคงที่อย่างชัดเจน หากเกิดข้อขัดแย้งของวิธีการ คุณจะต้องใช้วิธีเดียวเท่านั้น