คำถามติดแท็ก abstract-class

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


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




15
จะใช้เมื่อใด: วิธีการเริ่มต้นของอินเตอร์เฟส Java 8+, กับวิธีที่เป็นนามธรรม
Java 8 ช่วยให้การเริ่มต้นใช้งานวิธีการในการเชื่อมต่อที่เรียกว่าวิธีการเริ่มต้น ฉันสับสนระหว่างเมื่อไรที่ฉันจะใช้ประเภทinterface default methodนั้นแทนที่จะเป็นabstract class(พร้อมabstract method(s)) ดังนั้นควรจะใช้ส่วนต่อประสานกับวิธีการเริ่มต้นเมื่อใดและควรใช้คลาสนามธรรม (พร้อมวิธีนามธรรม) เมื่อใด คลาสนามธรรมยังมีประโยชน์ในสถานการณ์นั้นหรือไม่?

21
การสร้างคลาสนามธรรมใน Objective-C
เดิมทีฉันเป็นโปรแกรมเมอร์ Java ที่ตอนนี้ทำงานร่วมกับ Objective-C ฉันต้องการสร้างคลาสนามธรรม แต่ก็ไม่เป็นไปได้ใน Objective-C เป็นไปได้ไหม ถ้าไม่ฉันจะเข้าใกล้คลาสนามธรรมได้อย่างไรใน Objective-C

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

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

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


12
เป็นไปได้ไหมที่จะสร้างคลาสนามธรรมใน Python?
ฉันจะทำให้คลาสหรือวิธีการเป็นนามธรรมใน Python ได้อย่างไร ฉันลองนิยามใหม่__new__()เช่น: class F: def __new__(cls): raise Exception("Unable to create an instance of abstract class %s" %cls) แต่ตอนนี้ถ้าฉันสร้างคลาสGที่สืบทอดมาจากสิ่งที่Fชอบ: class G(F): pass ถ้าอย่างนั้นฉันก็ไม่สามารถสร้างอินสแตนซ์Gได้เนื่องจากมันเรียก__new__วิธีการของซูเปอร์คลาส มีวิธีที่ดีกว่าในการกำหนดคลาสนามธรรม?


11
ใช้ Mockito เพื่อทดสอบคลาสนามธรรม
ฉันต้องการทดสอบคลาสนามธรรม แน่นอนว่าฉันสามารถเขียนจำลองที่สืบทอดมาจากคลาสได้ด้วยตนเอง ฉันสามารถทำสิ่งนี้โดยใช้กรอบการเยาะเย้ย (ฉันใช้ Mockito) แทนการประดิษฐ์จำลองด้วยมือของฉันได้หรือไม่? อย่างไร?

5
เหตุใดจึงต้องใช้ Abstract Base Classes ใน Python
เนื่องจากฉันเคยชินกับการพิมพ์เป็ดแบบเก่าใน Python ฉันจึงไม่เข้าใจความต้องการ ABC (คลาสฐานนามธรรม) ความช่วยเหลือดีในการใช้งาน ฉันพยายามอ่านเหตุผลในPEPแต่มันไปทั่วหัวของฉัน หากฉันกำลังมองหาคอนเทนเนอร์ลำดับที่ไม่แน่นอนฉันจะตรวจสอบ__setitem__หรือลองใช้ ( EAFP ) มากกว่า ฉันยังไม่เจอการใช้งานจริงสำหรับโมดูลตัวเลขซึ่งใช้ ABCs แต่นั่นเป็นสิ่งที่ใกล้เคียงที่สุดที่ฉันต้องเข้าใจ ใครช่วยอธิบายเหตุผลให้ฉันหน่อยได้ไหม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.