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

ผู้เขียน: Laura McKinney
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 13 พฤษภาคม 2024
Anonim
ความแตกต่างระหว่างอินเตอร์เฟสและคลาสนามธรรมใน Java & C # - เทคโนโลยี
ความแตกต่างระหว่างอินเตอร์เฟสและคลาสนามธรรมใน Java & C # - เทคโนโลยี

เนื้อหา


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

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

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

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


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

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

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

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

รูปแบบทั่วไปของการใช้อินเตอร์เฟสใน Java:

คลาส class_name ใช้ Interface_name {// class-body}

สำหรับการสืบทอดอินเตอร์เฟสคลาสใช้คีย์เวิร์ด“ implements” และคลาสใช้เมธอดทั้งหมดที่ประกาศโดยอินเตอร์เฟสที่สืบทอด

อินเตอร์เฟสใน C #:

อินเตอร์เฟสใน C # ใกล้เคียงกับอินเตอร์เฟสใน Java ยกเว้น:

  • อินเตอร์เฟสใน C # ไม่ได้ประกาศตัวแปร
  • ชื่อของอินเตอร์เฟสถูกนำหน้าด้วยตัวพิมพ์ใหญ่ I และสืบทอดด้วยเครื่องหมายโคลอน (:)

รูปแบบทั่วไปของการใช้อินเทอร์เฟซใน C #:

คลาส class_name: interface_name {// class-body}

คำจำกัดความของคลาสนามธรรม

คลาสที่มีวิธีนามธรรมอย่างน้อยหนึ่งคลาสจะเรียกว่าคลาสนามธรรมและคลาสจะประกาศเป็นนามธรรมโดยใช้คีย์เวิร์ด“ abstract” นำหน้าด้วยคีย์เวิร์ด“ class” ที่จุดเริ่มต้นของการประกาศคลาส ในขณะที่คลาสนามธรรมมีวิธีนามธรรมมันถือว่าเป็นประเภทที่ไม่สมบูรณ์ ดังนั้นคุณไม่สามารถสร้างวัตถุของคลาสนามธรรม เมื่อใดก็ตามที่คลาสสืบทอดคลาสนามธรรมมันจะต้องใช้เมธอด abstract ทั้งหมดของคลาสนามธรรมถ้ามันไม่ต้องถูกประกาศว่าเป็นนามธรรมแอ็ตทริบิวต์ 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 ++ ถ้าอย่างน้อยคลาสมีหนึ่งฟังก์ชันเสมือนคลาสนั้นจะกลายเป็นคลาสนามธรรม แทนที่จะใช้คำสำคัญ“ นามธรรม” คำสำคัญ“ เสมือนจริง” จะใช้เพื่อประกาศวิธีการที่เป็นนามธรรม

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

สรุป:

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