คำถามติดแท็ก interface

อินเทอร์เฟซหมายถึงจุดที่กำหนดของการโต้ตอบกับส่วนประกอบ ส่วนต่อประสานสามารถใช้งานได้ทั้งระดับฮาร์ดแวร์และซอฟต์แวร์ --- นอกจากนี้ยังอ้างถึงองค์ประกอบภาษา `interface 'ซึ่งเป็นข้อยกเว้นเพียงอย่างเดียวของการสืบทอดเดี่ยวใน Java, C # และภาษาที่คล้ายกัน


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

30
“ โปรแกรมไปยังส่วนต่อประสาน” หมายความว่าอย่างไร
ฉันเคยเห็นสิ่งนี้พูดถึงสองสามครั้งและฉันไม่ชัดเจนในความหมายของมัน คุณจะทำสิ่งนี้เมื่อใดและเพราะเหตุใด ฉันรู้ว่าอินเตอร์เฟสทำอะไร แต่ความจริงแล้วฉันไม่ชัดเจนในเรื่องนี้ทำให้ฉันคิดว่าฉันพลาดการใช้งานอย่างถูกต้อง เป็นเช่นนั้นถ้าคุณต้องทำ: IInterface classRef = new ObjectWhatever() คุณสามารถใช้คลาสใดก็ได้ที่ใช้IInterface? คุณจะต้องทำเมื่อไหร่ IInterfaceสิ่งเดียวที่ฉันสามารถคิดคือถ้าคุณมีวิธีการและคุณไม่แน่ใจว่าวัตถุจะถูกส่งผ่านยกเว้นสำหรับการดำเนินการ ฉันไม่สามารถคิดได้ว่าคุณจะต้องทำบ่อยแค่ไหน นอกจากนี้คุณจะเขียนวิธีที่ใช้ในวัตถุที่ใช้อินเทอร์เฟซได้อย่างไร เป็นไปได้ไหม


30
ส่วนต่อประสานกับคลาสฐาน
ฉันควรใช้อินเทอร์เฟซเมื่อใดและควรใช้คลาสพื้นฐานเมื่อใด ควรเป็นอินเทอร์เฟซเสมอหรือไม่หากฉันไม่ต้องการกำหนดวิธีการใช้งานพื้นฐาน ถ้าฉันมีคลาส Dog และ Cat เหตุใดฉันจึงต้องการใช้งาน IPet แทน PetBase ฉันสามารถเข้าใจว่ามีอินเตอร์เฟสสำหรับ ISheds หรือ IBarks (IMakesNoise?) เพราะสามารถวางสัตว์เลี้ยงบนพื้นฐานของสัตว์เลี้ยงได้ แต่ฉันไม่เข้าใจว่าจะใช้สัตว์เลี้ยงทั่วไปชนิดใด


12
อินเทอร์เฟซ C # การใช้งานโดยนัยกับการนำไปใช้อย่างชัดเจน
อะไรคือความแตกต่างในการนำอินเตอร์เฟสไปใช้โดยนัยและชัดเจนใน C #? เมื่อใดที่คุณควรใช้โดยนัยและเมื่อใดที่คุณควรใช้อย่างชัดเจน มีข้อดีและ / หรือข้อเสียอย่างใดอย่างหนึ่งหรือไม่? แนวทางอย่างเป็นทางการของ Microsoft (จากแนวทางการออกแบบกรอบงานฉบับที่ 1 ) ระบุว่าไม่แนะนำให้ใช้การใช้งานอย่างชัดเจนเนื่องจากจะให้รหัสพฤติกรรมที่ไม่คาดคิด ฉันคิดว่าแนวทางนี้ใช้ได้ในเวลา IoC ก่อนเมื่อคุณไม่ผ่านสิ่งต่าง ๆ เป็นอินเทอร์เฟซ ใครสามารถสัมผัสด้านนั้นเช่นกัน?
632 c#  .net  interface 

14
วิธีการตรวจสอบว่าชนิดที่ใช้อินเทอร์เฟซกับ C # สะท้อน
ไม่สะท้อนในC#ทางที่เป็นข้อเสนอเพื่อตรวจสอบว่าได้รับบางSystem.Typeรุ่นประเภทอินเตอร์เฟซบางอย่าง? public interface IMyInterface {} public class MyType : IMyInterface {} // should yield 'true' typeof(MyType)./* ????? */MODELS_INTERFACE(IMyInterface);
562 c#  reflection  interface 


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

24
ทำไมฉันไม่สามารถกำหนดวิธีการคงที่ในส่วนต่อประสาน Java?
แก้ไข: ในฐานะของ Java 8 ตอนนี้วิธีการคงที่ได้รับอนุญาตในส่วนต่อประสาน นี่คือตัวอย่าง: public interface IXMLizable<T> { static T newInstanceFromXML(Element e); Element toXMLElement(); } แน่นอนว่ามันจะไม่ทำงาน แต่ทำไมล่ะ หนึ่งในปัญหาที่เป็นไปได้คือสิ่งที่เกิดขึ้นเมื่อคุณโทร: IXMLizable.newInstanceFromXML(e); ในกรณีนี้ฉันคิดว่ามันควรจะเรียกวิธีการที่ว่างเปล่า (เช่น {}) คลาสย่อยทั้งหมดจะถูกบังคับให้ใช้เมธอดสแตติกดังนั้นพวกมันทั้งหมดจึงใช้ได้เมื่อเรียกเมธอดสแตติก เหตุใดจึงเป็นไปไม่ได้ แก้ไข:ฉันเดาว่าฉันกำลังมองหาคำตอบที่ลึกกว่า "เพราะนั่นคือวิธีที่ Java เป็น" มีเหตุผลทางเทคโนโลยีเฉพาะหรือไม่ทำไมวิธีการแบบคงที่ไม่สามารถเขียนทับได้? นั่นคือเหตุผลที่นักออกแบบของ Java ตัดสินใจที่จะทำให้วิธีการเช่นการแทนที่ แต่ไม่ใช่วิธีการคงที่? แก้ไข:ปัญหาเกี่ยวกับการออกแบบของฉันคือฉันกำลังพยายามใช้อินเทอร์เฟซเพื่อบังคับใช้แบบแผนการเข้ารหัส นั่นคือเป้าหมายของอินเทอร์เฟซคือสองเท่า: ฉันต้องการอินเทอร์เฟซ IXMLizable เพื่อให้ฉันสามารถแปลงคลาสที่นำไปใช้กับองค์ประกอบ XML (โดยใช้ polymorphism ทำงานได้ดี) ถ้ามีคนต้องการสร้างอินสแตนซ์ใหม่ของคลาสที่ใช้อินเทอร์เฟซ IXMLizable พวกเขาจะรู้อยู่เสมอว่าจะมีตัวสร้างแบบคงที่ newInstanceFromXML (องค์ประกอบ e) …

13
ความแตกต่างระหว่างอินเตอร์เฟส Runnable และ Callable ใน Java
อะไรคือความแตกต่างระหว่างการใช้RunnableและCallableอินเตอร์เฟสเมื่อออกแบบเธรดที่เกิดขึ้นพร้อมกันใน Java ทำไมคุณถึงเลือกอันใดอันหนึ่ง?

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

15
เราควร @Override การใช้วิธีการอินเตอร์เฟซ?
ควรทำหมายเหตุประกอบวิธีที่ใช้วิธีการเชื่อมต่อกับ@Override? Javadoc ของOverrideคำอธิบายประกอบพูดว่า: บ่งชี้ว่าการประกาศเมธอดมีวัตถุประสงค์เพื่อแทนที่การประกาศเมธอดในซูเปอร์คลาส หากเมธอดถูกทำหมายเหตุประกอบด้วยชนิดคำอธิบายประกอบนี้ แต่ไม่ได้แทนที่เมธอด superclass จำเป็นต้องมีคอมไพเลอร์เพื่อสร้างข้อความแสดงข้อผิดพลาด ฉันไม่คิดว่าอินเทอร์เฟซเป็นซูเปอร์คลาสในทางเทคนิค หรือมันคืออะไร? Question Elaboration

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

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