ความแตกต่างหลัก: ส่วนต่อประสานหรือโปรโตคอลเป็นวิธีการทั่วไปที่ทำให้วัตถุที่ไม่เกี่ยวข้องสามารถสื่อสารกันได้ มันแสดงให้เห็นถึงพฤติกรรมที่ตกลงกันไว้ที่อำนวยความสะดวกในการปฏิสัมพันธ์ระหว่างวัตถุทั้งสอง คลาสนามธรรมเป็นคลาสของวัตถุที่ไม่สามารถสร้างอินสแตนซ์หรือตั้งค่าอินสแตนซ์ของวัตถุ คลาสนี้อาจไม่มีการนำไปใช้หรืออาจมีการนำไปใช้ไม่สมบูรณ์
Java เป็นภาษาโปรแกรมซึ่งได้รับอิทธิพลจากภาษา C มันมาจากไวยากรณ์มากจาก C และ C ++ อย่างไรก็ตามมันมีสิ่งอำนวยความสะดวกระดับต่ำกว่าน้อยกว่า Java เป็นภาษาการเขียนโปรแกรมวัตถุประสงค์ทั่วไปที่ออกแบบมาเพื่อให้มีการพึ่งพาการใช้งานน้อยลงเมื่อเทียบกับภาษาก่อนหน้า มันเป็นภาษาที่ใช้คลาสพร้อมกันและภาษาเชิงวัตถุ
Java ได้รับการพัฒนาโดย James Gosling ที่ Sun Microsystems และเปิดตัวในปี 1995 มันถูกปล่อยออกมาเป็นส่วนประกอบหลักของแพลตฟอร์ม Java ของ Sun Microsystem ซันได้รับอนุญาตให้ใช้เทคโนโลยีจาวาส่วนใหญ่อีกครั้งภายใต้สัญญาอนุญาตสาธารณะทั่วไปของกนู ซึ่งหมายความว่าเทคโนโลยีทั้งหมดที่ได้รับอนุญาตภายใต้สัญญาอนุญาตสาธารณะทั่วไปของกนูเป็นโอเพ่นซอร์สและโดยทั่วไปแล้วจะมีค่าใช้จ่าย ในที่สุด Sun Microsystems รวมเข้ากับ Oracle Corporation ตั้งแต่ปี 2012 Java ได้กลายเป็นหนึ่งในภาษาการเขียนโปรแกรมยอดนิยมสำหรับการใช้งาน สิ่งนี้เป็นจริงอย่างยิ่งสำหรับเว็บไคลเอ็นต์เซิร์ฟเวอร์ ระบบอื่น ๆ อีกมากมายได้พัฒนาการใช้งานทางเลือกของเทคโนโลยี Sun เช่น GNU Compiler สำหรับ Java และ GNU Classpath
คลาสนามธรรมเป็นคลาสของวัตถุที่ไม่สามารถสร้างอินสแตนซ์หรือตั้งค่าอินสแตนซ์ของวัตถุ คลาสนี้อาจไม่มีการนำไปใช้หรืออาจมีการนำไปใช้ไม่สมบูรณ์ นอกจากนี้ยังสามารถมีวิธีนามธรรมหรือคุณสมบัติที่ใช้ร่วมกันโดยทุกชั้นย่อย ในบางภาษาการเขียนโปรแกรมชนิดนามธรรมที่ไม่มีการนำไปใช้เรียกว่าอินเตอร์เฟส ใน Java ประเภทนามธรรมสามารถสร้างขึ้นโดยใช้คำหลัก 'นามธรรม' ในการกำหนดชั้นเรียน วัตถุประสงค์ของการมีคลาส abstract เพื่อวางเมธอดทั้งหมดที่ไม่ถูกนำไปใช้ในคลาส abstract และปล่อยให้คลาสย่อยเพื่อกำหนดวิธีการใช้คลาสเหล่านี้ ถ้าคลาสมีเมธอด abstract เดี่ยวคลาสต้องถูกประกาศเป็นคลาส abstract แม้ว่าจะไม่จำเป็นต้องมีเมธอดเดี่ยวอย่างน้อยหนึ่งวิธีเพื่อประกาศ abstract ของคลาส
Malliktalksjava.in แสดงความแตกต่างที่สำคัญระหว่างอินเตอร์เฟสและนามธรรมดังนี้:
- คลาสนามธรรมมีตัวสร้าง แต่อินเทอร์เฟซไม่
- คลาสนามธรรมสามารถมีการใช้งานสำหรับสมาชิกบางคน (วิธีการ) แต่อินเทอร์เฟซไม่สามารถมีการใช้งานสำหรับสมาชิกใด ๆ ของมัน
- คลาสนามธรรมควรมีคลาสย่อยอื่นที่จะไร้ประโยชน์
- การเชื่อมต่อจะต้องมีการใช้งานโดยชั้นเรียนอื่น ๆ ที่จะไร้ประโยชน์
- เฉพาะอินเตอร์เฟสเท่านั้นที่สามารถขยายอินเตอร์เฟสอื่นได้ แต่คลาสใดก็ตามสามารถขยายคลาสนามธรรมได้
- ตัวแปรทั้งหมดในส่วนต่อประสานถือเป็นที่สุดตามค่าเริ่มต้น
- อินเตอร์เฟสจัดเตรียมรูปแบบของการสืบทอดหลายแบบ คลาสสามารถขยายคลาสอื่นได้เพียงคลาสเดียวเท่านั้น
- ส่วนต่อประสานนั้น จำกัด อยู่เฉพาะวิธีสาธารณะและค่าคงที่ที่ไม่มีการใช้งาน คลาสที่เป็นนามธรรมอาจมีการนำไปใช้บางส่วนชิ้นส่วนที่ได้รับการป้องกันวิธีการคงที่ ฯลฯ
- คลาสอาจใช้หลายอินเตอร์เฟส แต่ในกรณีของคลาสนามธรรมคลาสอาจขยายคลาสนามธรรมเพียงคลาสเดียวเท่านั้น
- อินเทอร์เฟซช้าเนื่องจากต้องใช้วิธีทางอ้อมเพิ่มเติมเพื่อค้นหาวิธีการที่สอดคล้องกันในคลาสจริง คลาสนามธรรมเป็นไปอย่างรวดเร็ว
- ตัวดัดแปลงการช่วยสำหรับการเข้าถึง (สาธารณะ / ส่วนตัว / ภายใน) ได้รับอนุญาตสำหรับคลาสนามธรรม อินเทอร์เฟซไม่อนุญาตการปรับเปลี่ยนการเข้าถึง
- คลาสนามธรรมอาจมีวิธีการที่สมบูรณ์หรือไม่สมบูรณ์ การเชื่อมต่อสามารถมีเพียงลายเซ็นของวิธีการ แต่ไม่มีเนื้อหา ดังนั้นคลาส abstract สามารถใช้เมธอดได้ แต่อินเตอร์เฟสไม่สามารถใช้เมธอดได้
- คลาสนามธรรมสามารถมีฟิลด์คอนสตรัคเตอร์หรือ destructors และใช้คุณสมบัติ อินเทอร์เฟซต้องไม่มีเขตข้อมูลตัวสร้างหรือ destructors และมีลายเซ็นของคุณสมบัติเท่านั้น แต่ไม่มีการใช้งาน
- ตัวดัดแปลงการเข้าถึงที่หลากหลายเช่นนามธรรม, การป้องกัน, ภายใน, สาธารณะ, เสมือน ฯลฯ มีประโยชน์ในคลาสนามธรรม แต่ไม่ได้อยู่ในอินเตอร์เฟส
- ขอบเขตบทคัดย่อขึ้นอยู่กับคลาสที่ได้รับ
- ขอบเขตอินเทอร์เฟซขึ้นอยู่กับระดับของห่วงโซ่การสืบทอดใด ๆ
ข้อมูลสำหรับตารางคือความอนุเคราะห์ของ codeproject.com และ mindprod.com
อินเตอร์เฟซ | ชั้นนามธรรม | |
หลายมรดก | คลาสอาจรับช่วงต่อหลายอินเตอร์เฟส | คลาสอาจสืบทอดคลาสนามธรรมเพียงคลาสเดียวเท่านั้น |
การใช้งานเริ่มต้น | อินเทอร์เฟซไม่สามารถให้รหัสใด ๆ เพียงลายเซ็น | คลาสนามธรรมสามารถให้รหัสที่สมบูรณ์ค่าเริ่มต้นและ / หรือเพียงแค่รายละเอียดที่จะต้องถูกแทนที่ |
Access Modifiers | อินเทอร์เฟซไม่สามารถมีตัวดัดแปลงการเข้าถึงสำหรับส่วนย่อยฟังก์ชั่นคุณสมบัติและอื่น ๆ ทุกอย่างถือว่าเป็นสาธารณะ | คลาสนามธรรมสามารถมีตัวดัดแปลงการเข้าถึงสำหรับคุณสมบัติย่อยคุณสมบัติ |
หลักเทียบกับอุปกรณ์ต่อพ่วง | อินเทอร์เฟซใช้เพื่อกำหนดความสามารถด้านพ่วงของคลาส กล่าวอีกนัยหนึ่งทั้งมนุษย์และยานพาหนะสามารถสืบทอดจากส่วนต่อประสาน IMovable | คลาสนามธรรมกำหนดตัวตนหลักของคลาสและใช้สำหรับวัตถุประเภทเดียวกัน |
เป็นเนื้อเดียวกัน | หากการใช้งานที่หลากหลายร่วมกันเพียงลายเซ็นวิธีการแล้วมันจะดีกว่าที่จะใช้อินเทอร์เฟซ | หากการใช้งานที่หลากหลายเป็นชนิดเดียวกันและใช้พฤติกรรมหรือสถานะทั่วไปแล้วคลาสนามธรรมจะดีกว่าที่จะใช้ |
ความเร็ว | ต้องใช้เวลามากขึ้นในการค้นหาวิธีการที่แท้จริงในชั้นเรียนที่เกี่ยวข้อง | รวดเร็ว |
การเพิ่มฟังก์ชั่น | หากเราเพิ่มวิธีการใหม่ในส่วนติดต่อเราจะต้องติดตามการใช้งานทั้งหมดของส่วนต่อประสานและกำหนดการใช้งานสำหรับวิธีการใหม่ | หากเราเพิ่มวิธีการใหม่ในคลาสนามธรรมเรามีตัวเลือกในการให้การใช้งานเริ่มต้นและรหัสที่มีอยู่ทั้งหมดอาจทำงานได้อย่างถูกต้อง |
ทุ่งและค่าคงที่ | ไม่สามารถกำหนดเขตข้อมูลในอินเทอร์เฟซ | คลาสนามธรรมสามารถมีฟิลด์และค่าคงที่ที่กำหนดไว้ |
รวบรัด | การประกาศคงที่ในอินเทอร์เฟซสันนิษฐานว่าเป็นสแตติกสาธารณะสุดท้าย | รหัสที่ใช้ร่วมกันสามารถเพิ่มเข้าไปในชั้นนามธรรม |
ค่าคงที่ | ค่าคงที่สุดท้ายแบบคงที่เท่านั้นสามารถใช้ได้โดยไม่ต้องมีคุณสมบัติในคลาสที่ใช้อินเทอร์เฟซ | ทั้งอินสแตนซ์และค่าคงที่แบบคงที่นั้นเป็นไปได้ ทั้งรหัส intialiser คงที่และอินสแตนซ์ยังเป็นไปได้ที่จะคำนวณค่าคงที่ |
ความสะดวกสบายของบุคคลที่สาม | อาจมีการเพิ่มการใช้งานอินเทอร์เฟซในคลาสบุคคลที่สามที่มีอยู่ | คลาสของบุคคลที่สามต้องถูกเขียนใหม่เพื่อขยายจากคลาสนามธรรมเท่านั้น |
is-a vs. -able หรือ can-do | อินเทอร์เฟซมักใช้เพื่ออธิบายความสามารถของอุปกรณ์ต่อพ่วงในชั้นเรียนไม่ใช่ตัวตนที่เป็นศูนย์กลางเช่นคลาสยานยนต์อาจใช้อินเตอร์เฟสรีไซเคิลซึ่งสามารถนำไปใช้กับวัตถุที่ไม่เกี่ยวข้องทั้งหมดได้ | คลาสนามธรรมนิยามเอกลักษณ์หลักของลูกหลาน อินเทอร์เฟซที่ใช้งานจะแจกแจงสิ่งทั่วไปที่คลาสสามารถทำได้ไม่ใช่สิ่งที่คลาสนั้นเป็น ในบริบท Java โดยทั่วไปผู้ใช้ควรใช้ส่วนติดต่อแบบ Runnable แทนการขยายเธรดเนื่องจากพวกเขาไม่สนใจที่จะนำเสนอฟังก์ชั่นการทำงานของเธรดใหม่พวกเขาเพียงต้องการให้โค้ดบางตัวมีความสามารถในการทำงานอย่างอิสระ พวกเขาต้องการสร้างสิ่งที่สามารถเรียกใช้ในเธรดไม่ใช่เธรดชนิดใหม่ การอภิปรายแบบ is-a vs. vs. -a- ที่คล้ายกันเกิดขึ้นเมื่อคุณตัดสินใจที่จะสืบทอดหรือมอบหมาย |
เสียบเข้าไป | ผู้ใช้สามารถเขียนโมดูลการแทนที่ใหม่สำหรับอินเทอร์เฟซที่ไม่มีรหัสแท่งเดียวกับการใช้งานที่มีอยู่ เมื่อผู้ใช้ดำเนินการอินเทอร์เฟซพวกเขาเริ่มต้นจากศูนย์โดยไม่มีการใช้งานเริ่มต้น ผู้ใช้ต้องรับเครื่องมือจากคลาสอื่น ไม่มีสิ่งใดมาพร้อมกับอินเทอร์เฟซอื่นนอกจากค่าคงที่สองสาม สิ่งนี้ให้อิสระแก่ผู้ใช้ในการนำการออกแบบภายในที่แตกต่างไปอย่างสิ้นเชิง | ผู้ใช้จะต้องใช้คลาสนามธรรมตามที่เป็นอยู่สำหรับรหัสพื้นฐานพร้อมกับสัมภาระของผู้ดูแลทั้งหมดดีหรือไม่ดี ผู้เขียนระดับนามธรรมได้กำหนดโครงสร้างให้กับผู้ใช้ |
ซ่อมบำรุง | หากรหัสลูกค้าพูดถึงเฉพาะในแง่ของอินเทอร์เฟซคุณสามารถเปลี่ยนการใช้งานที่เป็นรูปธรรมได้อย่างง่ายดายโดยใช้วิธีการจากโรงงาน | หากรหัสลูกค้าพูดถึงในแง่ของระดับนามธรรมคุณสามารถเปลี่ยนการใช้งานที่เป็นรูปธรรมได้อย่างง่ายดายโดยใช้วิธีการจากโรงงาน |