สาระสำคัญของอินเทอร์เฟซในการเขียนโปรแกรมคืออะไร?

ใน PHP OOP อินเทอร์เฟซคือคลาสที่วิธีการทั้งหมดเป็นแบบนามธรรมและเป็นสาธารณะ

เรามาดูคำศัพท์สามคำที่ใช้ในคำจำกัดความนี้กันดีกว่า คลาส นามธรรม และเปิดกว้าง คลาสคือเทมเพลตหรือรูปแบบของวัตถุและเป็นพื้นฐานของการเขียนโปรแกรมเชิงวัตถุ วิธีนามธรรมเป็นวิธีการพิเศษที่ถูกประกาศ แต่ไม่มีเนื้อหา มีเพียงวงเล็บว่าง Public เป็นตัวแก้ไขการเข้าถึงสาธารณะและเชื่อมโยงกับการเข้าถึงวิธีการต่างๆ ซึ่งหมายความว่าสามารถเข้าถึงได้จากทุกที่: จากคลาสนี้ ภายนอก และจากคลาสที่ได้รับใดๆ

อินเทอร์เฟซ PHP เป็นเครื่องมือสำหรับสร้างโค้ดที่มีประสิทธิภาพซึ่งกำหนดวิธีการที่จะนำไปใช้โดยคลาสโดยไม่ต้องกำหนดการจัดการวิธีการเหล่านั้น นี่เป็นแนวคิดที่ทรงพลังและเรียบง่ายที่ใช้ใน PHP เชิงวัตถุ เพื่อสร้างมันขึ้นมา คำสำคัญ interface มันถูกกำหนดในลักษณะเดียวกับ คลาส PHP- วิธีการที่มีอยู่นั้นไม่มีฟังก์ชันการทำงาน แต่อินเทอร์เฟซจะระบุว่าวิธีการใดที่จำเป็นสำหรับคลาสอื่น คลาสใดๆ ที่สืบทอดมาจากอินเทอร์เฟซจะต้องมีวิธีการเดียวกันกับที่มีอยู่ในอินเทอร์เฟซ มิฉะนั้นจะเกิดข้อผิดพลาด

ในอินเทอร์เฟซ PHP OOP เราจะระบุเฉพาะชื่อของวิธีการและพารามิเตอร์เท่านั้น และสามารถนำมาใช้ได้ในภายหลัง เป็นเรื่องปกติที่จะประกาศวิธีการอินเทอร์เฟซทั้งหมดเป็นแบบสาธารณะ หากต้องการนำอินเทอร์เฟซไปใช้ ให้ใช้คีย์เวิร์ด Implements หากจำเป็น คลาสสามารถใช้อินเทอร์เฟซได้มากกว่าหนึ่งอินเทอร์เฟซ โดยคั่นด้วยเครื่องหมายจุลภาค เช่นเดียวกับคลาส อินเทอร์เฟซสามารถมีค่าคงที่ได้ ข้อแตกต่างเพียงอย่างเดียวคือไม่สามารถแทนที่ได้ในคลาสที่ได้รับ

การกำหนดและการใช้อินเทอร์เฟซ

อินเทอร์เฟซถูกกำหนดโดยใช้คีย์เวิร์ดอินเทอร์เฟซ วิธีการทั้งหมดในนั้นจะต้องเป็นแบบสาธารณะและเป็นนามธรรม:

ส่วนต่อประสานสัตว์ ( )

นี่คืออินเทอร์เฟซที่ว่างเปล่า เราจะเพิ่มวิธีการเคลื่อนที่เชิงนามธรรมลงไป ดังนั้นเราจะสร้าง PHP ง่าย ๆ 5 อินเทอร์เฟซ OOP ที่สามารถนำมาใช้ในภายหลัง:

ส่วนต่อประสานสัตว์ ( ฟังก์ชั่นสาธารณะ Motion()() )

อินเทอร์เฟซนี้สามารถนำไปใช้กับสัตว์ประเภทใดก็ได้ สัตว์ทุกประเภทจะมีวิธีการเคลื่อนไหว ลองดูตัวอย่าง ในการใช้อินเทอร์เฟซ เราใช้คำสำคัญที่นำไปใช้:

อินเทอร์เฟซ PHP และคลาสนามธรรม

อินเทอร์เฟซและคลาสนามธรรมมีความคล้ายคลึงกันมากในแนวคิด ช่วยในการสร้างเทมเพลตสำหรับคลาสที่จะใช้ในแอปพลิเคชัน ตามพื้นฐานของ PHP OOP จะแตกต่างกันดังนี้:

  1. ในอินเทอร์เฟซ วิธีการทั้งหมดเป็นแบบนามธรรม (ไม่มีการใช้งาน) ในคลาสนามธรรม มีเพียงบางวิธีเท่านั้นที่เป็นนามธรรม คลาสนามธรรมจะต้องมี อย่างน้อยวิธีนามธรรมวิธีหนึ่ง มิฉะนั้นมันจะเป็นคลาส PHP มาตรฐาน
  2. ในอินเทอร์เฟซ PHP วิธีการประกาศทั้งหมดเป็นแบบสาธารณะ ในขณะที่คลาสนามธรรม วิธีการอาจเป็นแบบสาธารณะ ส่วนตัว หรือแบบป้องกันก็ได้ ดังนั้นอินเทอร์เฟซจึงมีข้อจำกัดในการใช้ตัวดัดแปลงการเข้าถึง แต่คลาสนามธรรมไม่มีข้อจำกัดดังกล่าว
  3. คลาสสามารถใช้อินเทอร์เฟซได้ไม่จำกัดจำนวน ในเวลาเดียวกัน คลาส PHP สามารถสร้างคลาสนามธรรมได้เพียงคลาสเดียวเท่านั้น
  4. คุณต้องแทนที่วิธีอินเทอร์เฟซทั้งหมด แต่ในคลาสนามธรรมคุณมีทางเลือก: แทนที่วิธีการหรือปล่อยไว้ไม่เปลี่ยนแปลง
  5. อินเทอร์เฟซมีกฎที่เข้มงวดกว่าคลาสนามธรรม อินเทอร์เฟซ PHP ได้รับการออกแบบมาเพื่อให้ตรรกะบางอย่าง โดยทำหน้าที่เป็น wrapper เปล่าหรือเทมเพลตสำหรับคลาสอื่น

อินเทอร์เฟซ PHP ใช้ทำอะไร?

อินเทอร์เฟซช่วยให้โปรแกรมเมอร์คิดไปในทิศทางที่ถูกต้อง จากมุมมองของ PHP OOP คลาสคือเทมเพลตและออบเจ็กต์คือชุดของความสามารถ เราให้ความสำคัญกับฟังก์ชันการทำงานมากกว่าว่าฟังก์ชันนี้ทำงานอย่างไร มากกว่าที่จะคำนึงถึงการทำงาน ดังนั้นเราจึงกำหนดอินเทอร์เฟซพื้นฐานที่ใช้ร่วมกัน จากนั้นจึงนำไปใช้ ซึ่งจะช่วยให้คิดไปในทิศทางที่ถูกต้อง

การปรับปรุงโค้ดในอนาคต

การพัฒนา PHP เชิงวัตถุช่วยให้คุณสามารถปรับเปลี่ยนโค้ดได้ในอนาคตโดยไม่กระทบต่อฟังก์ชันการทำงานหลัก เมื่อเขียนโค้ดในอนาคต คุณลักษณะเหล่านี้จะถูกนำมาพิจารณาและรวมไว้ด้วยเสมอ ฟังก์ชั่นเพิ่มเติมแต่สิ่งนี้จะไม่มีผลกระทบใดๆ ต่อลักษณะพื้นฐานของออบเจ็กต์ที่มีอยู่

โครงสร้างโปรแกรมที่ดีขึ้น

PHP เชิงวัตถุถูกนำมาใช้เพื่อปรับปรุงโครงสร้าง แอปพลิเคชันที่สร้างขึ้น- การเพิ่มอินเทอร์เฟซให้กับ PHP ช่วยให้การเขียนโค้ดเรียบร้อยและสะอาดตา อินเทอร์เฟซป้องกันไม่ให้คุณเขียนโค้ดที่ยากต่อการบำรุงรักษาและการเปลี่ยนแปลง ด้วยความช่วยเหลือของอินเทอร์เฟซ เราสามารถรักษาและแก้ไขโค้ดได้อย่างง่ายดาย ซึ่งทำให้โปรแกรมเมอร์มีประสิทธิภาพมากขึ้น

เพิ่มคุณสมบัติที่สำคัญทั้งหมด

การใช้อินเทอร์เฟซ PHP เราสามารถสร้างฟังก์ชันพื้นฐานที่สามารถกำหนดได้ วัตถุต่างๆในรูปแบบต่างๆ จากนั้นจึงเพิ่มคุณสมบัติอื่นๆ ตามความจำเป็น

อีกตัวอย่าง OOP PHP ของการใช้งานอินเทอร์เฟซ

คลาสเค้กใช้สูตร ( วิธีการทำงานสาธารณะ () ( ) )

ในโค้ดนี้เราจะเห็นคลาส Cake ซึ่งใช้อินเทอร์เฟซ Recipe

การแปลบทความ “อินเทอร์เฟซ PHP” จัดทำโดยทีมงานโครงการที่เป็นมิตร

คำอธิบายของอินเทอร์เฟซ OOP หากเราเพิกเฉยรายละเอียดของไวยากรณ์ของภาษาใดภาษาหนึ่งจะประกอบด้วยสองส่วน:

  • ชื่ออินเทอร์เฟซซึ่งสร้างขึ้นตามกฎเดียวกันกับตัวระบุอื่น ๆ ของภาษาการเขียนโปรแกรมที่ใช้ ภาษาที่แตกต่างกันและสภาพแวดล้อมการพัฒนามีแบบแผนการจัดรูปแบบโค้ดที่แตกต่างกัน ตามชื่ออินเทอร์เฟซที่สามารถสร้างได้ตามกฎบางอย่างที่ทำให้ง่ายต่อการแยกแยะชื่ออินเทอร์เฟซจากชื่อขององค์ประกอบโปรแกรมอื่น ๆ ตัวอย่างเช่นใน เทคโนโลยีคอมและทุกภาษาที่รองรับก็มีแบบแผนตามชื่ออินเตอร์เฟสที่สร้างตามรูปแบบ “I<Имя>" กล่าวคือ ประกอบด้วยข้อความที่เขียนด้วย ตัวพิมพ์ใหญ่ชื่อที่มีความหมายนำหน้าด้วยอักษรตัวใหญ่ อักษรละตินฉัน (IUnknown, IDispatch, IStringList และอื่นๆ)
  • วิธีการอินเตอร์เฟซ. คำอธิบายอินเทอร์เฟซกำหนดชื่อและลายเซ็นของวิธีการที่รวมอยู่ในนั้น นั่นคือ ขั้นตอนหรือฟังก์ชันของคลาส

อินเทอร์เฟซสามารถใช้ได้สองวิธี:

  • ชั้นเรียนได้ ดำเนินการอินเตอร์เฟซ. การใช้งานอินเทอร์เฟซนั้นอยู่ในคำอธิบายคลาส อินเทอร์เฟซนี้ถูกระบุว่าสามารถนำไปใช้ได้ และในโค้ดคลาสวิธีการทั้งหมดที่อธิบายไว้ในอินเทอร์เฟซนั้นจำเป็นต้องถูกกำหนดให้สอดคล้องกับลายเซ็นจากคำอธิบายของอินเทอร์เฟซนี้ นั่นคือถ้าคลาสใช้อินเทอร์เฟซ วิธีการทั้งหมดที่อธิบายไว้ในอินเทอร์เฟซจะมีอยู่และสามารถเรียกได้สำหรับอินสแตนซ์ใดๆ ของคลาสนี้ คลาสหนึ่งสามารถใช้หลายอินเทอร์เฟซพร้อมกันได้
  • สามารถประกาศตัวแปรและพารามิเตอร์ของเมธอดว่ามีประเภทอินเทอร์เฟซได้ อินสแตนซ์ของคลาสใดๆ ที่ใช้อินเทอร์เฟซสามารถเขียนลงในตัวแปรหรือพารามิเตอร์ดังกล่าวได้ หากอินเทอร์เฟซถูกประกาศเป็นประเภทส่งคืนของฟังก์ชัน หมายความว่าฟังก์ชันส่งคืนอ็อบเจ็กต์ของคลาสที่ใช้อินเทอร์เฟซ

โดยทั่วไปแล้ว ในภาษาการเขียนโปรแกรมเชิงวัตถุ อินเทอร์เฟซ เช่น คลาส สามารถสืบทอดจากกันและกันได้ ในกรณีนี้ อินเทอร์เฟซลูกจะรวมวิธีการทั้งหมดของอินเทอร์เฟซระดับบนสุด และอาจเพิ่มวิธีการของตัวเองเข้าไปด้วย

ในแง่หนึ่ง อินเทอร์เฟซก็คือสัญญาที่คลาสตกลงที่จะดำเนินการ การดำเนินการในทางกลับกัน อินเทอร์เฟซนั้นเป็นประเภทข้อมูล เนื่องจากคำอธิบายของมันชัดเจนเพียงพอที่จะกำหนดคุณสมบัติของวัตถุเพื่อที่จะพิมพ์ตัวแปรในระดับที่เทียบเท่ากับคลาส อย่างไรก็ตาม ควรเน้นย้ำว่าอินเทอร์เฟซไม่ใช่ชนิดข้อมูลที่สมบูรณ์ เนื่องจากอินเทอร์เฟซจะระบุเฉพาะลักษณะการทำงานภายนอกของออบเจ็กต์เท่านั้น โครงสร้างภายในและการดำเนินการตามพฤติกรรมที่ระบุโดยอินเทอร์เฟซนั้นจัดทำโดยคลาสที่ใช้อินเทอร์เฟซ นั่นเป็นเหตุผลว่าทำไม "อินสแตนซ์อินเทอร์เฟซ" เข้ามา รูปแบบบริสุทธิ์ไม่มีอยู่ และตัวแปรประเภท “อินเทอร์เฟซ” ใดๆ มีอินสแตนซ์ของคลาสที่เป็นรูปธรรม

การใช้อินเทอร์เฟซเป็นหนึ่งในตัวเลือกในการจัดเตรียมความหลากหลายในภาษาของวัตถุและสภาพแวดล้อม คลาสทั้งหมดที่ใช้อินเทอร์เฟซเดียวกัน ในแง่ของพฤติกรรมที่กำหนด จะมีพฤติกรรมภายนอกเหมือนกัน ซึ่งช่วยให้คุณสามารถเขียนอัลกอริธึมการประมวลผลข้อมูลทั่วไปที่ใช้อินเทอร์เฟซเป็นประเภทพารามิเตอร์และนำไปใช้กับออบเจ็กต์ได้ หลากหลายชนิดจะได้รับผลลัพธ์ที่ต้องการทุกครั้ง

ตัวอย่างเช่น อินเทอร์เฟซ "Cloneable" สามารถอธิบายสิ่งที่เป็นนามธรรมของการโคลนนิ่ง (creating สำเนาถูกต้อง) วัตถุโดยการระบุวิธีการ "โคลน" ที่ควรคัดลอกเนื้อหาของวัตถุไปยังวัตถุอื่นที่เป็นประเภทเดียวกัน จากนั้นคลาสใดๆ ที่อาจจำเป็นต้องคัดลอกอ็อบเจ็กต์จะต้องใช้อินเทอร์เฟซ Cloneable และจัดเตรียมวิธีการ Clone และที่ใดก็ตามในโปรแกรมที่จำเป็นต้องมีการโคลนอ็อบเจ็กต์ วิธีการ Clone จะถูกเรียกบนอ็อบเจ็กต์เพื่อจุดประสงค์นี้ นอกจากนี้ โค้ดที่ใช้วิธีนี้จำเป็นต้องมีคำอธิบายของอินเทอร์เฟซเท่านั้น โค้ดอาจไม่ทราบอะไรเกี่ยวกับคลาสจริงที่มีการคัดลอกอ็อบเจ็กต์ ดังนั้นอินเทอร์เฟซจึงช่วยให้คุณสามารถแยกได้ ระบบซอฟต์แวร์ลงในโมดูลโดยไม่ต้องพึ่งพาโค้ดร่วมกัน

ส่วนต่อประสานและคลาสนามธรรม

คุณอาจสังเกตเห็นว่าอินเทอร์เฟซนั้นแท้จริงแล้วเป็นเพียงคลาสนามธรรมเท่านั้น นั่นคือคลาสที่ไม่มีสิ่งใดถูกกำหนดไว้ยกเว้นวิธีนามธรรม หากภาษาการเขียนโปรแกรมรองรับวิธีการสืบทอดและวิธีการเชิงนามธรรมหลายวิธี (เช่น C++) ก็ไม่จำเป็นต้องแนะนำแนวคิด "อินเทอร์เฟซ" ที่แยกต่างหาก เอนทิตีที่คล้ายกันถูกอธิบายว่าเป็นคลาสนามธรรมและสืบทอดโดยคลาสเพื่อนำเมธอดนามธรรมไปใช้

อย่างไรก็ตาม การสนับสนุนการสืบทอดหลายรายการอย่างสมบูรณ์นั้นค่อนข้างซับซ้อนและทำให้เกิดปัญหามากมาย ทั้งในระดับการใช้งานภาษาและในระดับสถาปัตยกรรมแอปพลิเคชัน การแนะนำแนวคิดของอินเทอร์เฟซเป็นการประนีประนอมที่ช่วยให้คุณได้รับประโยชน์มากมายจากการสืบทอดหลายรายการโดยไม่ต้องนำไปใช้อย่างเต็มที่ ดังนั้นจึงไม่ต้องพบกับปัญหาส่วนใหญ่ที่เกิดขึ้น

การสืบทอดหลายรายการและการใช้งานอินเทอร์เฟซ

โดยทั่วไปแล้วภาษาการเขียนโปรแกรมจะอนุญาตให้อินเทอร์เฟซสืบทอดมาจากอินเทอร์เฟซบรรพบุรุษหลายตัว วิธีการทั้งหมดที่ประกาศในส่วนต่อประสานระดับบนจะเป็นส่วนหนึ่งของการประกาศส่วนต่อประสานระดับบน ต่างจากการสืบทอดคลาส การสืบทอดอินเทอร์เฟซหลายรายการนั้นง่ายกว่ามากในการนำไปใช้และไม่ก่อให้เกิดปัญหาที่สำคัญ

แต่แล้วก็มีการชนกันครั้งหนึ่งกับ มรดกหลายอย่างอินเทอร์เฟซและเมื่อใช้หลายอินเทอร์เฟซกับคลาสเดียวยังคงเป็นไปได้ มันเกิดขึ้นเมื่ออินเทอร์เฟซตั้งแต่สองตัวขึ้นไปที่สืบทอดโดยอินเทอร์เฟซใหม่หรือใช้งานโดยคลาสมีวิธีการที่มีลายเซ็นเดียวกัน นักพัฒนาภาษาโปรแกรมถูกบังคับให้เลือกวิธีใดวิธีหนึ่งเพื่อแก้ไขข้อขัดแย้งในกรณีเช่นนี้ มีหลายตัวเลือกที่นี่:

  • ห้าม. ห้ามมิให้ใช้หลายอินเทอร์เฟซในคลาสเดียวซึ่งมีวิธีการที่มีลายเซ็นเดียวกัน หากคลาสต้องการอินเทอร์เฟซที่เข้ากันไม่ได้ร่วมกัน โปรแกรมเมอร์จะต้องเลือกวิธีอื่นในการแก้ปัญหา เช่น เลือกคลาสหลายคลาส ซึ่งแต่ละคลาสใช้คลาสใดคลาสหนึ่ง อินเทอร์เฟซที่จำเป็นและใช้อินสแตนซ์ร่วมกัน
  • การแก้ไขความคลุมเครือที่ชัดเจน หากคอมไพลเลอร์ตรวจพบการชนกัน โปรแกรมเมอร์จะต้องระบุอย่างชัดเจนว่าวิธีอินเทอร์เฟซใดที่เขานำไปใช้และเรียกใช้ นั่นคือวิธีการที่มีชื่อเดียวกันจะถูกนำไปใช้แยกกันและเมื่อมีการเรียกจะมีการระบุว่าวิธีใดเรียกว่าใด ตัวเลือกหนึ่งของโซลูชันนี้คือการเปลี่ยนชื่ออย่างชัดเจนสำหรับวิธีที่สืบทอดหรือนำไปใช้ซึ่งมีชื่อเดียวกัน เนื่องจากไม่มีวิธีการที่มีชื่อเดียวกันภายในคลาสการใช้งาน แต่เมื่อเข้าถึงผ่านอินเทอร์เฟซ การใช้งานที่จำเป็นจะถูกเรียกเสมอ
  • การใช้วิธีการทั่วไปที่มีชื่อเดียวกัน หากมีการสืบทอดหรือนำไปใช้หลายวิธีที่มีลายเซ็นเดียวกัน วิธีการเหล่านั้นจะถูกรวมไว้ในอินเทอร์เฟซที่สืบทอด และในคลาสการใช้งานนั้น พวกเขาจะได้รับหนึ่งวิธี การใช้งานโดยรวม- นี่เป็นสิ่งที่ดีสำหรับกรณีที่วิธีการชื่อเดียวกัน อินเทอร์เฟซที่แตกต่างกันเหมือนกันในฟังก์ชันการทำงานที่ตั้งใจไว้ แต่อาจทำให้เกิด ผลกระทบที่ไม่พึงประสงค์หากพฤติกรรมของวิธีการเหล่านี้ควรแตกต่างออกไป

อินเทอร์เฟซในภาษาและระบบเฉพาะ

การใช้งานอินเทอร์เฟซถูกกำหนดเป็นส่วนใหญ่ ความสามารถเบื้องต้นภาษาและวัตถุประสงค์ของอินเทอร์เฟซที่นำมาใช้ คุณลักษณะของการใช้อินเทอร์เฟซในภาษา C ++, Java และ Object Pascal ของระบบ Delphi นั้นแสดงให้เห็นได้ดีมากเนื่องจากแสดงให้เห็นถึงสถานการณ์ที่แตกต่างกันโดยพื้นฐานสามประการ:

  • ไม่มีอินเทอร์เฟซในระบบย่อยวัตถุของภาษา Object Pascal มีการแนะนำการสนับสนุนใน Delphi 2 เพื่อเปิดใช้งานการเขียนและการใช้ส่วนประกอบ COM ตามกลไกนั้น อินเทอร์เฟซเดลฟีเน้นการใช้เทคโนโลยี COM เป็นหลัก
  • ใน Java อินเทอร์เฟซจะรวมอยู่ในภาษาเริ่มแรกโดยเป็นส่วนสำคัญของภาษา
  • ในภาษา C++ พูดอย่างเคร่งครัด ไม่มีอินเทอร์เฟซเลย กลไกที่คล้ายกับอินเทอร์เฟซ (และก่อนหน้านี้ในอดีต) ถูกนำมาใช้โดยวิธีอื่นของระบบย่อยอ็อบเจ็กต์ที่ทรงพลังอย่างยิ่งของภาษานี้

เดลฟี

ใน COM เทคโนโลยี Delphi มีลักษณะคล้ายกับคลาส คลาสทั้งหมดเป็นลูกหลานของคลาสอย่างไร

ตัวอย่างการประกาศอินเทอร์เฟซ:

IMyInterface = ขั้นตอนอินเทอร์เฟซ DoSomething; จบ ;

เพื่อประกาศการใช้งานอินเทอร์เฟซ ในคำอธิบายคลาส คุณต้องระบุชื่อในวงเล็บหลังคีย์เวิร์ด class หลังชื่อของคลาสบรรพบุรุษ เนื่องจากอินเทอร์เฟซเป็นสัญญาที่จำเป็นต้องดำเนินการ โปรแกรมจะไม่คอมไพล์จนกว่าโพรซีเดอร์ DoSomething จะถูกนำไปใช้ในคลาส Implementing

การมุ่งเน้นที่กล่าวถึงข้างต้นของอินเทอร์เฟซ Delphi บนเทคโนโลยี COM ทำให้เกิดความไม่สะดวกบางประการ ความจริงก็คืออินเทอร์เฟซ IUnknown (ซึ่งอินเทอร์เฟซอื่น ๆ ทั้งหมดสืบทอด) มีสามวิธีอยู่แล้ว: QueryInterface,_AddRef, _Release ดังนั้นคลาสใด ๆ ที่ใช้อินเทอร์เฟซใด ๆ จำเป็นต้องใช้วิธีการเหล่านี้แม้ว่าอินเทอร์เฟซและคลาสจะไม่มีอะไรทำก็ตาม ทำกับคอม

ตัวอย่างของคลาสที่ใช้อินเทอร์เฟซ

TMyClass = คลาส (TMyParentClass, IMyInterface) ขั้นตอน DoSomething; ฟังก์ชั่น QueryInterface (const IID: TGUID; ออก Obj) : HResult; stdcall ; ฟังก์ชั่น _AddRef: จำนวนเต็ม ; stdcall ; ฟังก์ชั่น _Release: จำนวนเต็ม ; stdcall ; จบ ;

ซี++

ชวา

การประกาศอินเทอร์เฟซ

การประกาศอินเทอร์เฟซจะคล้ายกันมากกับการลดความซับซ้อนของการประกาศคลาส

มันเริ่มต้นด้วยชื่อเรื่อง ตัวแก้ไขจะถูกระบุก่อน อินเทอร์เฟซสามารถประกาศให้เป็นสาธารณะได้ จากนั้นจะสามารถเข้าถึงได้ การใช้งานทั่วไปหรืออาจไม่สามารถระบุตัวแก้ไขการเข้าถึงได้ ซึ่งในกรณีนี้อินเทอร์เฟซสามารถเข้าถึงได้เฉพาะกับประเภทแพ็คเกจเท่านั้น ไม่จำเป็นต้องใช้ตัวแก้ไขนามธรรมสำหรับอินเทอร์เฟซ เนื่องจากอินเทอร์เฟซทั้งหมดเป็นแบบนามธรรม คุณสามารถระบุได้ แต่ไม่แนะนำให้ทำเพื่อไม่ให้โค้ดเกะกะ

ซึ่งอาจตามด้วยคีย์เวิร์ดขยายและรายการอินเทอร์เฟซที่อินเทอร์เฟซที่ประกาศจะสืบทอดมา อาจมีประเภทพาเรนต์ได้หลายประเภท สิ่งสำคัญคือไม่มีการทำซ้ำ และความสัมพันธ์ในการสืบทอดไม่ก่อให้เกิดการขึ้นต่อกันแบบวนรอบ

การสืบทอดอินเทอร์เฟซมีความยืดหยุ่นมาก ดังนั้น หากมีอินเทอร์เฟซสองแบบ A และ B โดยที่ B สืบทอดมาจาก A แสดงว่า อินเทอร์เฟซใหม่ C สามารถสืบทอดจากทั้งสองอย่างได้ อย่างไรก็ตาม เป็นที่ชัดเจนว่าการระบุการสืบทอดจาก A นั้นซ้ำซ้อน องค์ประกอบทั้งหมดของอินเทอร์เฟซนี้จะได้รับการสืบทอดผ่านอินเทอร์เฟซ B แล้ว

ทิศทางอินเทอร์เฟซสาธารณะ ( int RIGHT=1; int LEFT=2; int UP=3; int DOWN=4; )

วิธีการอินเทอร์เฟซทั้งหมดเป็นนามธรรมสาธารณะ และตัวแก้ไขเหล่านี้ก็เป็นทางเลือกเช่นกัน

ส่วนต่อประสานสาธารณะ เคลื่อนย้ายได้ ( void moveRight(); void moveLeft(); void moveUp(); void moveDown(); )

ดังที่เราเห็น การอธิบายอินเทอร์เฟซนั้นง่ายกว่าการประกาศคลาสมาก

การใช้งานอินเทอร์เฟซ

หากต้องการใช้อินเทอร์เฟซ จะต้องระบุเมื่อประกาศคลาสโดยใช้คีย์เวิร์ด Implements ตัวอย่าง:

อินเทอร์เฟซ I ( void interfaceMethod() ; ) คลาสสาธารณะ ImplementingInterface นำไปใช้ I ( void interfaceMethod() ( System .out .println ( "วิธีการนี้ถูกนำมาใช้จากอินเทอร์เฟซ I"- ) โมฆะสาธารณะคงที่ main(String args) ( ImplementingInterface temp = new ImplementingInterface() ; temp.interfaceMethod () ; ) )

แต่ละคลาสสามารถนำไปใช้งานใดๆ อินเทอร์เฟซที่มีอยู่- ในกรณีนี้ คลาสจะต้องใช้วิธีการเชิงนามธรรมทั้งหมดที่ปรากฏขึ้นเมื่อสืบทอดจากอินเทอร์เฟซหรือคลาสพาเรนต์ เพื่อให้สามารถประกาศคลาสใหม่ที่ไม่ใช่แบบนามธรรมได้

ถ้าจาก แหล่งที่มาที่แตกต่างกันวิธีการที่มีลายเซ็นเดียวกันนั้นสืบทอดมา ดังนั้นก็เพียงพอแล้วที่จะอธิบายการใช้งานเพียงครั้งเดียว และจะใช้กับวิธีการเหล่านี้ทั้งหมด อย่างไรก็ตาม หากมีค่าส่งคืนที่แตกต่างกัน ก็จะเกิดข้อขัดแย้งขึ้น ตัวอย่าง:

อินเทอร์เฟซ A ( int getValue() ; ) อินเทอร์เฟซ B ( double getValue() ; ) อินเทอร์เฟซ C ( int getValue() ; ) คลาสสาธารณะ แก้ไข A, C อย่างถูกต้อง // คลาสสืบทอดวิธีการที่มีลายเซ็นเดียวกันอย่างถูกต้อง( int getValue() ( return 5 ; ) ) คลาส ใช้ A, B ไม่ถูกต้อง // คลาสทำให้เกิดข้อผิดพลาดในการคอมไพล์( int getValue() ( ส่งกลับ 5 ; ) getValue สองเท่า() ( ส่งกลับ 5.5 ; ) )

) เป็นโครงสร้างเชิงความหมายและวากยสัมพันธ์ในโค้ดโปรแกรมที่ใช้สำหรับบริการที่จัดทำโดยหรือ

อินเทอร์เฟซใน Delphi

อินเทอร์เฟซใน C ++

บทบาทของอินเทอร์เฟซใน C ++ ดำเนินการโดยคลาสนามธรรม

อินเทอร์เฟซใน Java

การประกาศอินเทอร์เฟซ

การประกาศอินเทอร์เฟซจะคล้ายกันมากกับการลดความซับซ้อนของการประกาศคลาส

มันเริ่มต้นด้วยชื่อเรื่อง ตัวแก้ไขจะถูกระบุก่อน อินเทอร์เฟซอาจถูกประกาศให้เป็นสาธารณะ ในกรณีนี้จะพร้อมใช้งานสำหรับสาธารณะ หรืออาจไม่ได้ระบุตัวแก้ไขการเข้าถึง ในกรณีนี้อินเทอร์เฟซจะพร้อมใช้งานเฉพาะกับแพ็คเกจเท่านั้น ตัวแก้ไขนามธรรมไม่จำเป็นต้องใช้อินเทอร์เฟซเนื่องจากอินเทอร์เฟซทั้งหมดเป็น . คุณสามารถระบุได้ แต่ไม่แนะนำให้ทำเพื่อไม่ให้เกะกะไฟล์ .

ซึ่งสามารถตามด้วยคีย์เวิร์ดขยายและอินเทอร์เฟซที่อินเทอร์เฟซที่ประกาศจะเป็น อาจมีประเภทพาเรนต์ได้หลายประเภท สิ่งสำคัญคือไม่มีการทำซ้ำ และความสัมพันธ์ในการสืบทอดไม่ก่อให้เกิดการขึ้นต่อกัน

การสืบทอดอินเทอร์เฟซมีความยืดหยุ่นมาก ดังนั้น หากมีอินเทอร์เฟซสองแบบ A และ B และ B สืบทอดมาจาก A ดังนั้นอินเทอร์เฟซ C ใหม่ก็สามารถสืบทอดจากทั้งสองอินเทอร์เฟซได้ อย่างไรก็ตาม เป็นที่ชัดเจนว่าการระบุการสืบทอดจาก A นั้นซ้ำซ้อน องค์ประกอบทั้งหมดของอินเทอร์เฟซนี้จะได้รับการสืบทอดผ่านอินเทอร์เฟซ B แล้ว

แล้วเข้า. วงเล็บปีกกาอินเทอร์เฟซถูกบันทึกไว้

ส่วนต่อประสานสาธารณะ Drawble ขยาย Colorable, ปรับขนาดได้ ( )

เนื้อความของอินเทอร์เฟซประกอบด้วยการประกาศ และวิธีการเชิงนามธรรม ช่องอินเทอร์เฟซทั้งหมดต้องเป็นสาธารณะ คงที่สุดท้ายดังนั้นการระบุตัวแก้ไขเหล่านี้จึงไม่จำเป็นและไม่เป็นที่พึงปรารถนาด้วยซ้ำ เพื่อไม่ให้ไฟล์ . เนื่องจากมีการประกาศฟิลด์ต่างๆ จึงต้องเริ่มต้นใช้งานทันที

ทิศทางอินเทอร์เฟซสาธารณะ ( int RIGHT=1; int LEFT=2; int UP=3; int DOWN=4; )

วิธีการอินเทอร์เฟซทั้งหมดเป็นนามธรรมสาธารณะ และตัวแก้ไขเหล่านี้ก็เป็นทางเลือกเช่นกัน

ส่วนต่อประสานสาธารณะ เคลื่อนย้ายได้ ( void moveRight(); void moveLeft(); void moveUp(); void moveDown(); )

ดังที่เราเห็น การอธิบายอินเทอร์เฟซนั้นง่ายกว่าการประกาศคลาสมาก

การใช้งานอินเทอร์เฟซ

แต่ละคลาสสามารถใช้อินเทอร์เฟซที่มีอยู่ได้ ในกรณีนี้ วิธีการเชิงนามธรรมทั้งหมดที่ปรากฏจากอินเทอร์เฟซหรือต้องถูกนำไปใช้เพื่อให้สามารถประกาศวิธีการใหม่ที่ไม่ใช่นามธรรมได้

ด้านข้าง. แตกต่างจากอินเทอร์เฟซประเภทอื่น ๆ อินเทอร์เฟซใน OOP เป็นองค์ประกอบที่เป็นทางการอย่างเคร่งครัดของภาษาเชิงวัตถุ และในฐานะที่เป็นโครงสร้างเชิงความหมาย มีการใช้กันอย่างแพร่หลายในโค้ดโปรแกรม

คำอธิบายและการใช้อินเทอร์เฟซ

คำอธิบายของอินเทอร์เฟซ OOP หากเราเพิกเฉยรายละเอียดของไวยากรณ์ของภาษาใดภาษาหนึ่งจะประกอบด้วยสองส่วน:

  • ชื่ออินเทอร์เฟซซึ่งสร้างขึ้นตามกฎเดียวกันกับตัวระบุอื่น ๆ ของภาษาการเขียนโปรแกรมที่ใช้ ภาษาและสภาพแวดล้อมการพัฒนาที่แตกต่างกันมีแบบแผนการจัดรูปแบบโค้ดที่แตกต่างกัน ซึ่งชื่ออินเทอร์เฟซสามารถสร้างขึ้นได้ตามกฎบางอย่างที่ทำให้ง่ายต่อการแยกแยะชื่ออินเทอร์เฟซจากชื่อขององค์ประกอบโปรแกรมอื่น ๆ ตัวอย่างเช่นในเทคโนโลยี COM และทุกภาษาที่รองรับ มีแบบแผนตามชื่ออินเทอร์เฟซที่สร้างขึ้นโดยใช้รูปแบบ “ฉัน<Имя>” นั่นคือประกอบด้วยชื่อที่มีความหมายซึ่งเขียนด้วยตัวพิมพ์ใหญ่นำหน้าด้วยอักษรละตินตัวพิมพ์ใหญ่ I (IUnknown, IDispatch, IStringList เป็นต้น)
  • วิธีการอินเตอร์เฟซ. คำอธิบายอินเทอร์เฟซกำหนดชื่อและลายเซ็นของวิธีการที่รวมอยู่ในนั้น นั่นคือ ขั้นตอนหรือฟังก์ชันของคลาส

อินเทอร์เฟซสามารถใช้ได้สองวิธี:

  • ชั้นเรียนได้ ดำเนินการอินเตอร์เฟซ. การใช้งานอินเทอร์เฟซคือในคำอธิบายคลาสอินเทอร์เฟซนี้ถูกระบุว่าสามารถใช้งานได้ และในโค้ดคลาสวิธีการทั้งหมดที่อธิบายไว้ในอินเทอร์เฟซจำเป็นต้องถูกกำหนดให้สอดคล้องกับลายเซ็นจากคำอธิบายของอินเทอร์เฟซนี้ นั่นคือถ้าคลาสใช้อินเทอร์เฟซ วิธีการทั้งหมดที่อธิบายไว้ในอินเทอร์เฟซจะมีอยู่และสามารถเรียกได้สำหรับอินสแตนซ์ใดๆ ของคลาสนี้ คลาสหนึ่งสามารถใช้หลายอินเทอร์เฟซพร้อมกันได้
  • สามารถประกาศตัวแปรและพารามิเตอร์ของเมธอดว่ามีประเภทอินเทอร์เฟซได้ อินสแตนซ์ของคลาสใดๆ ที่ใช้อินเทอร์เฟซสามารถเขียนลงในตัวแปรหรือพารามิเตอร์ดังกล่าวได้ หากอินเทอร์เฟซถูกประกาศเป็นประเภทส่งคืนของฟังก์ชัน หมายความว่าฟังก์ชันส่งคืนอ็อบเจ็กต์ของคลาสที่ใช้อินเทอร์เฟซ

โดยทั่วไปแล้ว ในภาษาการเขียนโปรแกรมเชิงวัตถุ อินเทอร์เฟซ เช่น คลาส สามารถสืบทอดจากกันและกันได้ ในกรณีนี้ อินเทอร์เฟซลูกจะรวมวิธีการทั้งหมดของอินเทอร์เฟซระดับบนสุด และอาจเพิ่มวิธีการของตัวเองเข้าไปด้วย

ในแง่หนึ่ง อินเทอร์เฟซก็คือสัญญาที่คลาสตกลงที่จะดำเนินการ การดำเนินการในทางกลับกัน อินเทอร์เฟซนั้นเป็นประเภทข้อมูล เนื่องจากคำอธิบายของมันชัดเจนเพียงพอที่จะกำหนดคุณสมบัติของวัตถุเพื่อที่จะพิมพ์ตัวแปรในระดับที่เทียบเท่ากับคลาส อย่างไรก็ตาม ควรเน้นย้ำว่าอินเทอร์เฟซไม่ใช่ชนิดข้อมูลที่สมบูรณ์ เนื่องจากอินเทอร์เฟซจะระบุเฉพาะลักษณะการทำงานภายนอกของออบเจ็กต์เท่านั้น โครงสร้างภายในและการดำเนินการตามพฤติกรรมที่ระบุโดยอินเทอร์เฟซนั้นจัดทำโดยคลาสที่ใช้อินเทอร์เฟซ นั่นคือสาเหตุว่าทำไมจึงไม่มี "อินเทอร์เฟซอินสแตนซ์" ในรูปแบบบริสุทธิ์ และตัวแปรใดๆ ที่เป็นประเภท "อินเทอร์เฟซ" จะมีอินสแตนซ์ของคลาสเฉพาะ

การใช้อินเทอร์เฟซเป็นหนึ่งในตัวเลือกในการจัดเตรียมความหลากหลายในภาษาของวัตถุและสภาพแวดล้อม คลาสทั้งหมดที่ใช้อินเทอร์เฟซเดียวกัน ในแง่ของพฤติกรรมที่กำหนด จะมีพฤติกรรมภายนอกเหมือนกัน ซึ่งช่วยให้คุณสามารถเขียนอัลกอริธึมการประมวลผลข้อมูลทั่วไปที่ใช้อินเทอร์เฟซเป็นประเภทพารามิเตอร์และนำไปใช้กับออบเจ็กต์ประเภทต่างๆ ในแต่ละครั้งจะได้ผลลัพธ์ที่ต้องการ

ตัวอย่างเช่น อินเทอร์เฟซ Cloneable สามารถอธิบายนามธรรมของการโคลน (การทำสำเนาที่แน่นอน) ของวัตถุโดยการระบุวิธีการโคลนที่จะคัดลอกเนื้อหาของวัตถุไปยังวัตถุอื่นที่เป็นประเภทเดียวกัน จากนั้นคลาสใดๆ ที่อาจจำเป็นต้องคัดลอกอ็อบเจ็กต์จะต้องใช้อินเทอร์เฟซ Cloneable และจัดเตรียมวิธีการ Clone และที่ใดก็ตามในโปรแกรมที่จำเป็นต้องมีการโคลนอ็อบเจ็กต์ วิธีการ Clone จะถูกเรียกบนอ็อบเจ็กต์เพื่อจุดประสงค์นี้ นอกจากนี้ โค้ดที่ใช้วิธีนี้จำเป็นต้องมีคำอธิบายของอินเทอร์เฟซเท่านั้น โค้ดอาจไม่ทราบอะไรเกี่ยวกับคลาสจริงที่มีการคัดลอกอ็อบเจ็กต์ ดังนั้นอินเทอร์เฟซจึงอนุญาตให้ระบบซอฟต์แวร์แบ่งออกเป็นโมดูลโดยไม่ต้องพึ่งพาโค้ดร่วมกัน

ส่วนต่อประสานและคลาสนามธรรม

สามารถสังเกตได้ว่าอินเทอร์เฟซ จากมุมมองของการนำไปปฏิบัติ เป็นเพียงคลาสนามธรรมล้วนๆ นั่นคือคลาสที่ไม่มีการกำหนดอะไรเลย ยกเว้นวิธีการเชิงนามธรรม หากภาษาการเขียนโปรแกรมรองรับวิธีการสืบทอดและนามธรรมหลายวิธี (เช่น C ++) ก็ไม่จำเป็นต้องแนะนำแนวคิด "อินเทอร์เฟซ" ที่แยกต่างหากในไวยากรณ์ของภาษา เอนทิตีเหล่านี้อธิบายโดยใช้คลาสนามธรรมและสืบทอดโดยคลาสเพื่อใช้วิธีนามธรรม

อย่างไรก็ตาม การสนับสนุนการสืบทอดหลายรายการอย่างสมบูรณ์นั้นค่อนข้างซับซ้อนและทำให้เกิดปัญหามากมาย ทั้งในระดับการใช้งานภาษาและในระดับสถาปัตยกรรมแอปพลิเคชัน การแนะนำแนวคิดของอินเทอร์เฟซเป็นการประนีประนอมที่ช่วยให้ได้รับประโยชน์มากมายจากการสืบทอดหลายรายการ (โดยเฉพาะความสามารถในการกำหนดตรรกะได้อย่างสะดวก ชุดที่เกี่ยวข้องในรูปแบบของเอนทิตีที่มีลักษณะคล้ายคลาสที่อนุญาตให้มีการสืบทอดและการนำไปใช้) โดยไม่ต้องนำไปใช้อย่างเต็มที่ ดังนั้นจึงไม่ต้องพบกับปัญหาส่วนใหญ่ที่เกิดขึ้น

การสืบทอดหลายรายการและการใช้งานอินเทอร์เฟซ

โดยทั่วไปแล้วภาษาการเขียนโปรแกรมจะอนุญาตให้อินเทอร์เฟซสืบทอดมาจากอินเทอร์เฟซบรรพบุรุษหลายตัว วิธีการทั้งหมดที่ประกาศในส่วนต่อประสานระดับบนจะเป็นส่วนหนึ่งของการประกาศส่วนต่อประสานระดับบน ต่างจากการสืบทอดคลาส การสืบทอดอินเทอร์เฟซหลายรายการนั้นง่ายกว่ามากในการนำไปใช้และไม่ก่อให้เกิดปัญหาที่สำคัญ

อย่างไรก็ตาม การชนกันหนึ่งครั้งที่มีการสืบทอดอินเทอร์เฟซหลายรายการและการใช้งานหลายอินเทอร์เฟซโดยคลาสเดียวยังคงเป็นไปได้ มันเกิดขึ้นเมื่ออินเทอร์เฟซตั้งแต่สองตัวขึ้นไปที่สืบทอดโดยอินเทอร์เฟซใหม่หรือใช้งานโดยคลาสมีวิธีการที่มีลายเซ็นเดียวกัน นักพัฒนาภาษาโปรแกรมถูกบังคับให้เลือกวิธีใดวิธีหนึ่งเพื่อแก้ไขข้อขัดแย้งในกรณีเช่นนี้ มีหลายตัวเลือกที่นี่:

  • ห้าม. ห้ามมิให้ใช้หลายอินเทอร์เฟซในคลาสเดียวซึ่งมีวิธีการที่มีลายเซ็นเดียวกัน หากคลาสต้องการอินเทอร์เฟซที่เข้ากันไม่ได้รวมกัน โปรแกรมเมอร์จะต้องเลือกวิธีอื่นในการแก้ปัญหา เช่น เลือกหลายคลาส ซึ่งแต่ละคลาสใช้อินเทอร์เฟซที่ต้องการอย่างใดอย่างหนึ่ง และใช้อินสแตนซ์ร่วมกัน
  • การแก้ไขความคลุมเครือที่ชัดเจน หากคอมไพลเลอร์ตรวจพบการชนกัน โปรแกรมเมอร์จะต้องระบุอย่างชัดเจนว่าวิธีอินเทอร์เฟซใดที่เขานำไปใช้และเรียกใช้ นั่นคือวิธีการที่มีชื่อเดียวกันจะถูกนำไปใช้แยกกันและเมื่อมีการเรียกจะมีการระบุว่าวิธีใดเรียกว่าใด เมื่อเรียกวิธีการชื่อเดียวกันผ่านทาง ตัวแปรประเภทความคลุมเครือของอินเทอร์เฟซจะไม่เกิดขึ้นหากอินเทอร์เฟซที่ใช้เป็นประเภทตัวแปรมีเพียงวิธีเดียวเท่านั้น ชื่อที่กำหนด- ตัวเลือกหนึ่งของโซลูชันนี้คือการเปลี่ยนชื่ออย่างชัดเจนสำหรับวิธีที่สืบทอดหรือนำไปใช้ซึ่งมีชื่อเดียวกัน เนื่องจากไม่มีวิธีการที่มีชื่อเดียวกันภายในคลาสการใช้งาน แต่เมื่อเข้าถึงผ่านอินเทอร์เฟซ การใช้งานที่จำเป็นจะถูกเรียกเสมอ
  • การใช้วิธีการทั่วไปที่มีชื่อเดียวกัน หากมีการสืบทอดหรือนำไปใช้หลายวิธีที่มีลายเซ็นเดียวกัน วิธีการเหล่านั้นจะถูกรวมไว้ในอินเทอร์เฟซที่สืบทอด และในคลาสการใช้งาน พวกเขาจะได้รับการนำไปใช้ทั่วไปเพียงครั้งเดียว วิธีนี้ใช้ได้ผลดีในกรณีที่วิธีการที่มีชื่อเดียวกันบนอินเทอร์เฟซที่แตกต่างกันเหมือนกันในฟังก์ชันการทำงานที่ตั้งใจไว้ แต่อาจทำให้เกิดผลกระทบที่ไม่พึงประสงค์ได้หากลักษณะการทำงานของวิธีการเหล่านี้มีจุดมุ่งหมายให้แตกต่างกัน

อินเทอร์เฟซในภาษาและระบบเฉพาะ

การใช้งานอินเทอร์เฟซนั้นส่วนใหญ่จะถูกกำหนดโดยความสามารถดั้งเดิมของภาษาและวัตถุประสงค์ของอินเทอร์เฟซที่ถูกนำมาใช้ คุณลักษณะของการใช้อินเทอร์เฟซในภาษา C++, D, Java และ Object Pascal ของระบบ Delphi นั้นแสดงให้เห็นได้ดีมากเนื่องจากแสดงให้เห็นถึงสถานการณ์ที่แตกต่างกันโดยพื้นฐานสามประการ:

  • ไม่มีอินเทอร์เฟซในระบบย่อยวัตถุของภาษา Object Pascal มีการแนะนำการสนับสนุนใน Delphi 2 เพื่อเปิดใช้งานการเขียนและการใช้ส่วนประกอบ COM ดังนั้นกลไกอินเทอร์เฟซของ Delphi จึงมุ่งเน้นไปที่การใช้เทคโนโลยี COM เป็นหลัก
  • ใน Java อินเทอร์เฟซจะรวมอยู่ในภาษาเริ่มแรกโดยเป็นส่วนสำคัญของภาษา
  • ในภาษา C++ พูดอย่างเคร่งครัด ไม่มีอินเทอร์เฟซเลย กลไกที่คล้ายกับอินเทอร์เฟซ (และก่อนหน้านี้ในอดีต) ถูกนำมาใช้โดยวิธีอื่นของระบบย่อยอ็อบเจ็กต์ที่ทรงพลังอย่างยิ่งของภาษานี้

เดลฟี

การประกาศอินเทอร์เฟซ

การประกาศอินเทอร์เฟซจะคล้ายกันมากกับการลดความซับซ้อนของการประกาศคลาส

มันเริ่มต้นด้วยชื่อเรื่อง ตัวแก้ไขจะถูกระบุก่อน อินเทอร์เฟซอาจถูกประกาศต่อสาธารณะ ในกรณีนี้จะพร้อมใช้งานสำหรับการใช้งานทั่วไป หรืออาจไม่สามารถระบุตัวแก้ไขการเข้าถึงได้ ในกรณีนี้ อินเทอร์เฟซจะสามารถเข้าถึงได้เฉพาะกับประเภทแพ็คเกจเท่านั้น ไม่จำเป็นต้องใช้ตัวแก้ไขนามธรรมสำหรับอินเทอร์เฟซ เนื่องจากอินเทอร์เฟซทั้งหมดเป็นแบบนามธรรม คุณสามารถระบุได้ แต่ไม่แนะนำให้ทำเพื่อไม่ให้โค้ดเกะกะ

ซึ่งอาจตามด้วยคีย์เวิร์ดขยายและรายการอินเทอร์เฟซที่อินเทอร์เฟซที่ประกาศจะสืบทอดมา อาจมีประเภทพาเรนต์ได้หลายประเภท สิ่งสำคัญคือไม่มีการทำซ้ำ และความสัมพันธ์ในการสืบทอดไม่ก่อให้เกิดการขึ้นต่อกันแบบวนรอบ

การสืบทอดอินเทอร์เฟซมีความยืดหยุ่นมาก ดังนั้น หากมีอินเทอร์เฟซสองแบบ A และ B และ B สืบทอดมาจาก A ดังนั้นอินเทอร์เฟซ C ใหม่ก็สามารถสืบทอดจากทั้งสองอินเทอร์เฟซได้ อย่างไรก็ตาม เป็นที่ชัดเจนว่าการระบุการสืบทอดจาก A นั้นซ้ำซ้อน องค์ประกอบทั้งหมดของอินเทอร์เฟซนี้จะได้รับการสืบทอดผ่านอินเทอร์เฟซ B แล้ว

ทิศทางอินเทอร์เฟซสาธารณะ (

อินท์ ขวา=1; int ซ้าย=2; int ขึ้น=3; int ลง=4;

วิธีการอินเทอร์เฟซทั้งหมดเป็นนามธรรมสาธารณะ และตัวแก้ไขเหล่านี้ก็เป็นทางเลือกเช่นกัน