คลาสนามธรรมกับอินเทอร์เฟซ: ความแตกต่างและความคล้ายคลึงกัน

เผยแพร่แล้ว: 2021-06-02

หากคุณกำลังนั่งสัมภาษณ์งานวิศวกรรมซอฟต์แวร์ คำถามหนึ่งที่คุณสามารถคาดหวังได้ในแบบของคุณคือ – ความแตกต่างและความคล้ายคลึงกันระหว่าง Abstract Class และ Interface

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

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

ในตอนท้ายของบทความนี้ คุณสามารถแยกความแตกต่างระหว่าง Abstract Classes และ Interfaces ได้อย่างชัดเจน และประเภทใดที่จะใช้สำหรับกรณีเฉพาะ

สารบัญ

อินเทอร์เฟซ - มันคืออะไร?

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

วิธีการทั้งหมดในอินเทอร์เฟซต้องเป็นแบบสาธารณะและเป็นนามธรรม ดังนั้น อินเตอร์เฟสจึงถูกเข้าใจว่าเป็นคลาส "นามธรรมล้วนๆ"

คำจำกัดความของอินเทอร์เฟซมีลักษณะดังนี้:

อินเทอร์เฟซสาธารณะ การกิน{

โมฆะสาธารณะเคี้ยว ();

โมฆะย่อยสาธารณะ ();

}

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

ตอนนี้เรามาดูกันว่า Abstract Classes คืออะไร จากนั้นเราจะนำแนวคิดทั้งสองมารวมกัน เพื่อให้คุณมีความชัดเจนมากขึ้นเกี่ยวกับความเหมือนและความแตกต่าง

คลาสนามธรรม - มันคืออะไร?

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

นี่คือลักษณะของคำจำกัดความของคลาสนามธรรม:

ชั้นเรียนนามธรรมสาธารณะ การกิน{

โมฆะสาธารณะ getReady(){

System.out.println(“ฉันพร้อมจะกินแล้ว”);

}

นามธรรมสาธารณะเริ่มต้นเป็นโมฆะ ();

โมฆะนามธรรมสาธารณะหยุด ();

}

ดังที่คุณเห็นในคำจำกัดความของคลาส abstract ฟังก์ชัน getReady() นั้นเป็นฟังก์ชันที่ไม่เป็นนามธรรม ในขณะที่ start(); และ หยุด (); ฟังก์ชั่นที่เป็นนามธรรม

เมื่อพูดถึงการนำ Abstract Classes ไปใช้ มีกฎสองสามข้อที่คุณควรทราบ:

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

ตอนนี้เรามีพื้นฐานของคลาส Interfaces และ Abstract แล้ว เรามาพูดถึงความแตกต่าง ความคล้ายคลึงกัน และเวลาที่เราควรใช้วิธีใด

ความแตกต่างและความคล้ายคลึงระหว่างอินเทอร์เฟซและคลาสนามธรรม

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

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

นี่คือบทสรุปของความแตกต่างที่สำคัญทั้งหมดระหว่าง Abstract Class และ Interface

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

Abstract Class vs Interface: เมื่อใดควรเลือกอันไหน

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

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

มาสรุปกรณีการใช้งานของ Interfaces และ Abstract Classes กัน!

ควรใช้อินเทอร์เฟซเมื่อใด

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

เมื่อใดควรใช้คลาสนามธรรม

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

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

สรุปแล้ว

Abstraction เป็นองค์ประกอบสำคัญของ OOP และทั้ง Abstract Classes และ Interfaces ช่วยให้คุณบรรลุความเป็นนามธรรมในระดับหนึ่งในโค้ดของคุณ อย่างไรก็ตาม การใช้แทนกันโดยไม่รู้ข้อดีและข้อเสียเป็นความผิดพลาด และอาจทำให้โค้ดของคุณ (และในที่สุดซอฟต์แวร์ของคุณ) มีปัญหาและล้าหลัง

เราหวังว่าบทความนี้จะช่วยให้คุณเข้าใจถึงความแตกต่างที่สำคัญระหว่าง Abstract Classes และ Interfaces พร้อมด้วยความรู้ทางวากยสัมพันธ์และตำแหน่งที่จะนำไปใช้

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Abstract Classes and Interfaces โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์แบบครบวงจร ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง โครงการและการมอบหมายมากกว่า 9 รายการ , สถานะศิษย์เก่า IIIT-B, โครงการหลักที่นำไปปฏิบัติได้จริง & ความช่วยเหลือด้านงานกับบริษัทชั้นนำ

หากคุณยังสับสนเกี่ยวกับความแตกต่าง โปรดแสดงความคิดเห็นด้านล่าง แล้วเราจะติดต่อกลับโดยเร็วที่สุด!

คลาสนามธรรมใน Java คืออะไร?

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

ควรใช้คลาสนามธรรมใน Java เมื่อใด

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

คลาสนามธรรมและอินเทอร์เฟซใน Java แตกต่างกันอย่างไร

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