แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่างอินเตอร์เฟสและคลาสนามธรรมใน Java & C #

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

กราฟเปรียบเทียบ

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

นิยามของอินเตอร์เฟส

Java ไม่อนุญาตให้สืบทอดหลายรายการ นั่นคือคลาสเดียวไม่สามารถรับช่วงต่อเวลาได้มากกว่าหนึ่งคลาส เหตุผลเบื้องหลังสามารถอธิบายได้ด้วยตัวอย่าง สมมติว่าเรามีคลาส parent สองคลาสคือ A และ B และคลาส C ที่ได้รับคลาส C สืบทอดทั้งคลาส A และ B ตอนนี้ทั้งคลาส A และ B มีเมธอด set () จากนั้นจะเป็นคำถาม สำหรับคลาส C ซึ่งเมธอด set () ของคลาสควรสืบทอดมา การแก้ปัญหานี้คือ "ส่วนต่อประสาน"

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

 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 #

  1. เมื่อคุณมีความรู้เกี่ยวกับ "สิ่งที่จำเป็น" แต่ไม่ใช่ "วิธีการนำไปใช้" จะต้องใช้ส่วนต่อประสาน ในทางกลับกันถ้าคุณรู้ว่าอะไรคือสิ่งที่ต้องการและบางส่วนรู้ว่ามันจะถูกนำไปใช้อย่างไรให้ใช้คลาสนามธรรม
  2. อินเทอร์เฟซมีวิธีการทั้งหมดเป็นนามธรรม แต่คลาสนามธรรมมีวิธีนามธรรมและวิธีที่เป็นรูปธรรมบางอย่าง
  3. วิธีการภายในส่วนต่อประสานนั้นเป็นแบบสาธารณะและเป็นนามธรรมดังนั้นจึงเรียกว่าเป็นคลาสนามธรรมที่บริสุทธิ์ ในทางตรงกันข้ามวิธีการในนามธรรมไม่ได้ จำกัด ให้เป็นสาธารณะและนามธรรมเท่านั้น
  4. วิธีการอินเทอร์เฟซไม่สามารถเป็นส่วนตัวได้รับการป้องกันขั้นสุดท้ายคงที่ซิงโครไนซ์เนทิฟหรือแบบ จำกัด ในทางตรงกันข้ามไม่มีข้อ จำกัด ของวิธีการเรียนนามธรรม
  5. ตัวแปรในอินเทอร์เฟซเป็นแบบสาธารณะและสุดท้ายไม่ว่าเราจะประกาศหรือไม่ก็ตามในขณะที่ไม่มีข้อ จำกัด ดังกล่าวกับตัวแปรของคลาสนามธรรมที่จะเป็นแบบสาธารณะและสุดท้ายเท่านั้น
  6. ตัวแปรในอินเทอร์เฟซไม่สามารถป้องกันชั่วคราวหรือระเหยได้ในขณะที่ไม่มีการ จำกัด ตัวแปรในคลาสนามธรรม
  7. ตัวแปรของอินเตอร์เฟสต้องเริ่มต้นในระหว่างการประกาศ ในทางตรงกันข้ามตัวแปรในคลาสนามธรรมสามารถเริ่มต้นได้ตลอดเวลา
  8. ภายในอินเทอร์เฟซไม่สามารถประกาศอินสแตนซ์หรือบล็อกแบบคงที่ได้ แต่คุณสามารถประกาศอินสแตนซ์หรือบล็อกแบบคงที่ภายในคลาสนามธรรม
  9. คุณไม่สามารถกำหนดนวกรรมิกภายในอินเทอร์เฟซในขณะที่คุณสามารถกำหนดคอนสตรัคเตอร์ภายในระดับนามธรรม

สรุป:

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

Top