
กราฟเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | อินเตอร์เฟซ | ชั้นนามธรรม |
---|---|---|
ขั้นพื้นฐาน | เมื่อคุณมีความรู้เกี่ยวกับข้อกำหนดที่ไม่เกี่ยวกับการนำไปใช้งานคุณจะใช้ "ส่วนต่อประสาน" | เมื่อคุณรู้บางส่วนเกี่ยวกับการใช้งานคุณใช้ "Abstract classes" |
วิธีการ | ส่วนต่อประสานมีเพียงวิธีนามธรรม | ชั้นนามธรรมประกอบด้วยวิธีนามธรรมเช่นเดียวกับวิธีที่เป็นรูปธรรม |
Access Modifier ของเมธอด | วิธีการอินเทอร์เฟซมักจะ "สาธารณะ" และ "บทคัดย่อ" แม้ว่าเราจะไม่ประกาศ ดังนั้นจึงอาจกล่าวได้ว่าเป็นระดับนามธรรมที่บริสุทธิ์ 100% | ไม่บังคับว่าวิธีการในระดับนามธรรมจะเป็นสาธารณะและนามธรรม มันสามารถมีวิธีที่เป็นรูปธรรมได้เช่นกัน |
ตัวดัดแปลงที่ จำกัด สำหรับวิธีการ | วิธีการอินเทอร์เฟซไม่สามารถประกาศด้วยตัวดัดแปลงต่อไปนี้: สาธารณะ: ส่วนตัวและได้รับการป้องกัน บทคัดย่อ: สุดท้าย, คงที่, ซิงโครไนซ์, เนทีฟ, เข้มงวด | ไม่มีข้อ จำกัด ในการปรับเปลี่ยนของตัวแปรระดับนามธรรม |
Access Modifier ของตัวแปร | Acess Modifier ที่อนุญาตสำหรับตัวแปร Interface เป็นแบบสาธารณะ, คงที่ & สุดท้ายไม่ว่าเราจะประกาศหรือไม่ก็ตาม | ตัวแปรในคลาสนามธรรมไม่จำเป็นต้องเป็นสาธารณะคงที่และสุดท้าย |
ตัวดัดแปลงที่ จำกัด สำหรับตัวแปร | ตัวแปรอินเทอร์เฟซไม่สามารถประกาศให้เป็นส่วนตัว, ป้องกัน, ชั่วคราว, ระเหยได้ | ไม่มีข้อ จำกัด ในการปรับเปลี่ยนของตัวแปรระดับนามธรรม |
การเริ่มต้นของตัวแปร | ตัวแปรอินเตอร์เฟซจะต้องเริ่มต้นในเวลาที่มีการประกาศ | มันไม่จำเป็นที่จะต้องเริ่มต้นตัวแปรระดับนามธรรมในเวลาที่ประกาศ |
อินสแตนซ์และบล็อกคง | ภายในอินเทอร์เฟซคุณไม่สามารถประกาศอินสแตนซ์หรือบล็อกแบบคงที่ได้ | คลาสนามธรรมอนุญาตให้มีอินสแตนซ์หรือบล็อกแบบคงที่อยู่ข้างใน |
ก่อสร้าง | คุณไม่สามารถประกาศ Constructor ภายในอินเตอร์เฟสได้ | คุณสามารถประกาศตัวสร้างภายในคลาสนามธรรม |
นิยามของอินเตอร์เฟส
Java ไม่อนุญาตให้สืบทอดหลายรายการ นั่นคือคลาสเดียวไม่สามารถรับช่วงต่อเวลาได้มากกว่าหนึ่งคลาส เหตุผลเบื้องหลังสามารถอธิบายได้ด้วยตัวอย่าง สมมติว่าเรามีคลาส parent สองคลาสคือ A และ B และคลาส C ที่ได้รับคลาส C สืบทอดทั้งคลาส A และ B ตอนนี้ทั้งคลาส A และ B มีเมธอด set () จากนั้นจะเป็นคำถาม สำหรับคลาส C ซึ่งเมธอด set () ของคลาสควรสืบทอดมา การแก้ปัญหานี้คือ "ส่วนต่อประสาน"

access_specifier อินเตอร์เฟส interface_name {return-type method-name1 (พารามิเตอร์รายการ); return-type method-name2 (พารามิเตอร์รายการ); พิมพ์ final-varname1 = value; พิมพ์ final-varname2 = value; // ... return-type method-nameN (พารามิเตอร์รายการ); พิมพ์ final-varnameN = value; }
ตัวระบุการเข้าถึงถูกประกาศสู่สาธารณะเนื่องจากคลาสจำเป็นต้องใช้อินเตอร์เฟส
เราไม่มีแนวคิดของ "ส่วนต่อประสาน" ใน C ++ แต่ Java และ C # กำหนดอินเตอร์เฟสได้เป็นอย่างดี
อินเตอร์เฟสใน Java:
- ตัวแปรของอินเทอร์เฟซโดยค่าเริ่มต้นเป็นสาธารณะคงที่และสุดท้ายเสมอ
- ตัวแปรจะต้องเริ่มต้นในเวลาที่มีการประกาศ
- ตัวแปรไม่สามารถถูกประกาศให้เป็นส่วนตัวได้รับการป้องกันชั่วคราวและระเหยได้
- วิธีการของอินเตอร์เฟซที่เป็นสาธารณะและเป็นนามธรรมในขณะที่พวกเขาไม่สามารถประกาศว่าเป็นส่วนตัวได้รับการคุ้มครองสุดท้ายคงที่ซิงโครไนซ์พื้นเมืองและเข้มงวด
- คุณไม่สามารถประกาศ Constructor ใด ๆ ภายในส่วนต่อประสานได้เนื่องจากวัตถุประสงค์หลักของ Constructor คือการเริ่มต้นของตัวแปรคลาส แต่ในส่วนติดต่อตัวแปรจะเริ่มต้น ณ เวลาที่มีการประกาศ
- อินเทอร์เฟซสามารถสืบทอดอินเทอร์เฟซอื่น ๆ แต่คลาสที่ใช้อินเทอร์เฟซดังกล่าวต้องใช้วิธีการของอินเทอร์เฟซที่สืบทอดทั้งหมด
- คลาสสามารถสืบทอดมากกว่าหนึ่งอินเทอร์เฟซในครั้งเดียวและจะต้องใช้วิธีการทั้งหมดของอินเทอร์เฟซที่สืบทอดทั้งหมด
รูปแบบทั่วไปของการใช้อินเตอร์เฟสใน Java:
คลาส class_name ใช้ Interface_name {// class-body}
สำหรับการสืบทอดอินเตอร์เฟสคลาสใช้คีย์เวิร์ด“ implements” และคลาสใช้เมธอดทั้งหมดที่ประกาศโดยอินเตอร์เฟสที่สืบทอด
อินเตอร์เฟสใน C #:
อินเตอร์เฟสใน C # ใกล้เคียงกับอินเตอร์เฟสใน Java ยกเว้น:
- อินเตอร์เฟสใน C # ไม่ได้ประกาศตัวแปร
- ชื่อของอินเทอร์เฟซนำหน้าด้วยตัวพิมพ์ใหญ่ I และสืบทอดโดยใช้เครื่องหมายโคลอน (:)
รูปแบบทั่วไปของการใช้อินเทอร์เฟซใน C #:
คลาส class_name: interface_name {// class-body}
คำจำกัดความของคลาสนามธรรม
คลาสที่มีเมธอด abstract อย่างน้อยหนึ่งคลาสเรียกว่าคลาส abstract และคลาสถูกประกาศเป็น abstract โดยใช้คีย์เวิร์ด“ abstract” นำหน้าด้วยคีย์เวิร์ด“ class” ที่จุดเริ่มต้นของการประกาศคลาส ในขณะที่คลาสนามธรรมมีวิธีนามธรรมมันถือว่าเป็นประเภทที่ไม่สมบูรณ์ ดังนั้นคุณไม่สามารถสร้างวัตถุของคลาสนามธรรม เมื่อใดก็ตามที่คลาสสืบทอดคลาสนามธรรมมันจะต้องใช้เมธอด abstract ทั้งหมดของคลาสนามธรรมถ้ามันไม่เป็นเช่นนั้นก็จะต้องประกาศเป็นนามธรรมแอตทริบิวต์นามธรรมนั้นสืบทอดมาจนกระทั่งการดำเนินการตามวิธีนามธรรมเสร็จสมบูรณ์
คลาสนามธรรมสามารถมีวิธีที่เป็นรูปธรรมซึ่งสามารถใช้โดยคลาสที่ได้รับตามที่เป็นอยู่ แต่คุณไม่สามารถประกาศตัวสร้างนามธรรมหรือวิธีคงที่นามธรรมภายในชั้นนามธรรม รูปแบบทั่วไปของคลาสนามธรรมใน Java มีดังนี้
คลาสนามธรรม class_name {abstract method_name1 (); นามธรรม method_name2 (); : return_type method_name3 (parameter_list) {// วิธีคอนกรีต) return_type method_name4 (parameter_list) {// วิธีคอนกรีต}};
แนวคิดของคลาสนามธรรมมีความคล้ายคลึงกันทั้งใน Java และ C # คลาสนามธรรมจะแตกต่างกันเล็กน้อยใน C ++
ใน C ++ ถ้าอย่างน้อยคลาสมีหนึ่งฟังก์ชันเสมือนคลาสนั้นจะกลายเป็นคลาสนามธรรม แทนที่จะใช้คำสำคัญ“ นามธรรม” คำสำคัญ“ เสมือนจริง” จะใช้เพื่อประกาศวิธีการที่เป็นนามธรรม
ความแตกต่างที่สำคัญระหว่างอินเทอร์เฟซและคลาสนามธรรมใน Java & C #
- เมื่อคุณมีความรู้เกี่ยวกับ "สิ่งที่จำเป็น" แต่ไม่ใช่ "วิธีการนำไปใช้" จะต้องใช้ส่วนต่อประสาน ในทางกลับกันถ้าคุณรู้ว่าอะไรคือสิ่งที่ต้องการและบางส่วนรู้ว่ามันจะถูกนำไปใช้อย่างไรให้ใช้คลาสนามธรรม
- อินเทอร์เฟซมีวิธีการทั้งหมดเป็นนามธรรม แต่คลาสนามธรรมมีวิธีนามธรรมและวิธีที่เป็นรูปธรรมบางอย่าง
- วิธีการภายในส่วนต่อประสานนั้นเป็นแบบสาธารณะและเป็นนามธรรมดังนั้นจึงเรียกว่าเป็นคลาสนามธรรมที่บริสุทธิ์ ในทางตรงกันข้ามวิธีการในนามธรรมไม่ได้ จำกัด ให้เป็นสาธารณะและนามธรรมเท่านั้น
- วิธีการอินเทอร์เฟซไม่สามารถเป็นส่วนตัวได้รับการป้องกันขั้นสุดท้ายคงที่ซิงโครไนซ์เนทิฟหรือแบบ จำกัด ในทางตรงกันข้ามไม่มีข้อ จำกัด ของวิธีการเรียนนามธรรม
- ตัวแปรในอินเทอร์เฟซเป็นแบบสาธารณะและสุดท้ายไม่ว่าเราจะประกาศหรือไม่ก็ตามในขณะที่ไม่มีข้อ จำกัด ดังกล่าวกับตัวแปรของคลาสนามธรรมที่จะเป็นแบบสาธารณะและสุดท้ายเท่านั้น
- ตัวแปรในอินเทอร์เฟซไม่สามารถป้องกันชั่วคราวหรือระเหยได้ในขณะที่ไม่มีการ จำกัด ตัวแปรในคลาสนามธรรม
- ตัวแปรของอินเตอร์เฟสต้องเริ่มต้นในระหว่างการประกาศ ในทางตรงกันข้ามตัวแปรในคลาสนามธรรมสามารถเริ่มต้นได้ตลอดเวลา
- ภายในอินเทอร์เฟซไม่สามารถประกาศอินสแตนซ์หรือบล็อกแบบคงที่ได้ แต่คุณสามารถประกาศอินสแตนซ์หรือบล็อกแบบคงที่ภายในคลาสนามธรรม
- คุณไม่สามารถกำหนดนวกรรมิกภายในอินเทอร์เฟซในขณะที่คุณสามารถกำหนดคอนสตรัคเตอร์ภายในระดับนามธรรม
สรุป:
เมื่อคุณต้องการสร้างคลาสพื้นฐานซึ่งประกอบด้วยรูปแบบทั่วไปของวิธีการที่สามารถนำมาใช้โดยคลาสที่ได้รับตามความต้องการของพวกเขาแนวคิดของอินเทอร์เฟซและคลาสนามธรรมช่วยในการทำเช่นนั้น