JavaRush /จาวาบล็อก /Random-TH /10 คลาสนามธรรมและอินเทอร์เฟซคำถามสัมภาษณ์ Java

10 คลาสนามธรรมและอินเทอร์เฟซคำถามสัมภาษณ์ Java

เผยแพร่ในกลุ่ม
คลาสนามธรรมและอินเทอร์เฟซได้รับความนิยมอย่างมากในทุกภาษาการเขียนโปรแกรมเชิงวัตถุ และในเกือบทุกการสัมภาษณ์ Java คุณเจอคำถามอย่างน้อยหนึ่งข้อในหัวข้อนี้ มีการกล่าวถึงอินเทอร์เฟซบ่อยขึ้นเนื่องจากความนิยมในหมู่นักออกแบบซอฟต์แวร์ แต่คำถามเกี่ยวกับคลาสนามธรรมก็เกิดขึ้นเป็นครั้งคราว อย่างหลังมักถูกถามถึงผู้สมัครในตำแหน่ง Junior Developer เช่น มีประสบการณ์ในการพัฒนา Java ไม่เกินสองปี ในขณะที่คำถามเกี่ยวกับอินเทอร์เฟซมักพบในระหว่างการสัมภาษณ์ผู้ที่มีประสบการณ์เกินสี่ปีแล้ว โดยทั่วไปแล้ว คำถามเหล่านี้จะถูกถามร่วมกับคำถามอื่นๆ เกี่ยวกับรูปแบบการออกแบบ Java เช่น รูปแบบมัณฑนากรหรือรูปแบบโรงงาน 10 คลาสนามธรรมและอินเทอร์เฟซคำถามสัมภาษณ์ Java - 1ในบทความนี้ เราจะดูคำถามทั่วไปเกี่ยวกับคลาสนามธรรมและอินเทอร์เฟซที่ถูกถามในการสัมภาษณ์ Java ระดับต่างๆ ส่วนใหญ่ไม่ควรยากแม้แต่กับโปรแกรมเมอร์ Java มือใหม่ก็ตาม คำถามเหล่านี้ส่วนใหญ่เป็นคำถามความรู้ล้วนๆ แต่บางคำถาม เช่นความแตกต่างระหว่างคลาสนามธรรมและอินเทอร์เฟซใน Javaหรือเมื่อใดควรเลือกคลาสนามธรรมเหนืออินเทอร์เฟซอาจเป็นเรื่องที่ยุ่งยากมาก เราเสนอคำถามที่น่าสนใจมากมายให้คุณในหัวข้อนี้
หากคุณเคยถูกถามคำถามในการสัมภาษณ์หรือต้องถามคำถามที่คุ้มค่าเกี่ยวกับคลาสนามธรรมและอินเทอร์เฟซ แต่ไม่มีอยู่ในรายการนี้ โปรดแชร์ในความคิดเห็น

1. คลาสนามธรรมสามารถมีคอนสตรัคเตอร์ใน Java ได้หรือไม่?

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

2. คลาสนามธรรมใน Java สามารถใช้อินเทอร์เฟซได้หรือไม่ พวกเขาต้องใช้วิธีทั้งหมดหรือไม่?

ใช่ คลาสนามธรรมสามารถใช้อินเทอร์เฟซโดยใช้นามสกุลimplements. เนื่องจากเป็นนามธรรม จึงไม่จำเป็นต้องใช้วิธีการทั้งหมด การมีคลาสพื้นฐานที่เป็นนามธรรมและอินเทอร์เฟซสำหรับประกาศประเภทคือแนวทางปฏิบัติที่แนะนำ ตัวอย่างคืออินเทอร์เฟซjava.util.Listและคลาสนามธรรมที่สอดคล้องjava.util.AbstractListกัน เนื่องจากAbstractListใช้วิธีการทั่วไปทั้งหมด การใช้งานเฉพาะ (เช่นLinkedListและArrayList) จึงไม่จำเป็นต้องใช้วิธีการทั้งหมด ดังเช่นในกรณีที่มีการใช้อินเทอร์เฟซListโดยตรง โซลูชันนี้รวมประโยชน์ของการใช้อินเทอร์เฟซเพื่อประกาศประเภทที่มีความยืดหยุ่นของคลาสนามธรรมเพื่อนำลักษณะการทำงานทั่วไปทั้งหมดไปใช้ในที่เดียว ในหนังสือของ Joshua Bloch เรื่อง “Java. การเขียนโปรแกรมที่มีประสิทธิภาพ”มีบทที่ยอดเยี่ยมเกี่ยวกับหัวข้อการใช้อินเทอร์เฟซและคลาสนามธรรมใน Java เพื่อความเข้าใจที่ดีขึ้นจึงสมเหตุสมผลที่จะศึกษา

3. คลาสนามธรรมถือเป็นที่สิ้นสุดได้หรือไม่?

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

4. คลาสนามธรรมใน Java สามารถมีวิธีการคงที่ได้หรือไม่?

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

5. เป็นไปได้ไหมที่จะสร้างอินสแตนซ์คลาสนามธรรม?

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

6. จำเป็นหรือไม่ที่คลาสนามธรรมจะต้องมีวิธีนามธรรม?

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

7. อะไรคือความแตกต่างระหว่างคลาสนามธรรมและอินเทอร์เฟซใน Java?

นี่เป็นคำถามสัมภาษณ์ Java ที่สำคัญที่สุดและคลาสสิกที่สุดคำถามหนึ่ง ฉันไม่สามารถนับได้กี่ครั้งที่ฉันเห็นคำถามนี้ในการสัมภาษณ์ Java ในทุกระดับ สิ่งที่ทำให้คำถามนี้น่าสนใจคือ โอกาสที่ผู้สมัครจะได้ยกตัวอย่าง การตอบคำถามเกี่ยวกับพื้นฐานของการเขียนโปรแกรมเชิงวัตถุ เช่น นามธรรม การห่อหุ้ม ความหลากหลาย และการสืบทอด เป็นเรื่องง่าย แต่เมื่อพูดถึงความแตกต่างเล็กๆ น้อยๆ ผู้สมัครงานมักจะสับสนและพูดสิ่งแรกที่เข้ามาในใจ คำตอบสำหรับคำถามนี้สมควรได้รับบทความแยกต่างหาก (โดยเฉพาะหลังจากการเปลี่ยนแปลงใน Java 8) อย่างไรก็ตามโดยย่อ:
  • อินเทอร์เฟซอธิบายเฉพาะพฤติกรรม (วิธีการ) ของวัตถุ แต่ไม่มีสถานะ (ฟิลด์) (ยกเว้นpublic static final) ในขณะที่คลาสนามธรรมสามารถมีได้

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

  • คลาสนามธรรมถูกใช้เมื่อมีความสัมพันธ์ "is-a" นั่นคือคลาสย่อยขยายคลาสนามธรรมฐาน และอินเทอร์เฟซสามารถนำไปใช้โดยคลาสต่างๆ ที่ไม่เกี่ยวข้องกันเลย

8. เมื่อใดจึงสมเหตุสมผลที่จะเลือกใช้คลาสนามธรรมมากกว่าอินเทอร์เฟซและในทางกลับกัน?

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

  • คุณคาดหวังว่าคลาสที่ขยายคลาสนามธรรมของคุณจะมีวิธีการหรือฟิลด์มากมายที่เหมือนกัน หรือจำเป็นต้องมีตัวแก้ไขการเข้าถึงอื่นนอกเหนือจากpublic(ตัวอย่างprotectedและprivate)

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

  • คุณต้องการกำหนดลักษณะการทำงานของข้อมูลประเภทใดประเภทหนึ่ง แต่คุณไม่สนใจว่าใครจะนำไปใช้

  • คุณต้องการใช้การสืบทอดหลายประเภท

9. วิธีการเชิงนามธรรมใน Java คืออะไร?

วิธีนามธรรมคือวิธีการที่ไม่มีเนื้อหา คุณเพียงแค่ประกาศวิธีการโดยไม่ต้องกำหนด โดยใช้คำสำคัญabstractในการประกาศวิธีการ วิธีการทั้งหมดที่ประกาศภายในอินเทอร์เฟซในภาษา Java นั้นเป็นนามธรรมตามค่าเริ่มต้น นี่คือตัวอย่างของวิธีนามธรรมใน Java:
public void abstract printVersion();
ตอนนี้ หากต้องการใช้วิธีนี้ คุณจะต้องขยายคลาสนามธรรมและแทนที่วิธีนี้

10. คลาสนามธรรมใน Java สามารถมีเมธอดได้ หรือไม่ main?

ใช่ คลาสนามธรรมใน Java สามารถมี method ได้mainเนื่องจากเป็นเพียงวิธีสแตติกอื่น และคลาสนามธรรมสามารถดำเนินการได้โดยใช้ method mainตราบใดที่คุณไม่สร้างอินสแตนซ์นั้น นั่นคือทั้งหมดที่ฉันอยากจะบอกคุณ และโปรดจำไว้ว่า: คลาสนามธรรมและอินเทอร์เฟซคือการตัดสินใจในการออกแบบที่สำคัญในการวิเคราะห์เชิงวัตถุและกระบวนการออกแบบ และแน่นอนว่าควรใช้ด้วยความระมัดระวังตามสมควร หากคุณต้องการสร้างระบบที่ยืดหยุ่น
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION