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

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


14
เหตุใดฉันจึงไม่สามารถประกาศวิธีการคงที่ในส่วนต่อประสานได้
หัวข้อบอกว่าส่วนใหญ่ - เหตุผลสำหรับความจริงที่ว่าวิธีการคงที่ไม่สามารถประกาศในอินเตอร์เฟซคืออะไร? public interface ITest { public static String test(); } รหัสด้านบนให้ข้อผิดพลาดต่อไปนี้กับฉัน (ใน Eclipse อย่างน้อย): "ตัวดัดแปลงที่ผิดกฎหมายสำหรับวิธีการเชื่อมต่อ ITest.test (); อนุญาตให้สาธารณะ & นามธรรมเท่านั้น"

11
ตัวสร้างในอินเทอร์เฟซ
ฉันรู้ว่าไม่สามารถกำหนดนวกรรมิกในอินเทอร์เฟซได้ แต่ฉันสงสัยว่าทำไมเพราะฉันคิดว่ามันมีประโยชน์มาก ดังนั้นคุณสามารถมั่นใจได้ว่ามีการกำหนดบางฟิลด์ในคลาสสำหรับทุกการใช้อินเทอร์เฟซนี้ ตัวอย่างเช่นพิจารณาคลาสข้อความต่อไปนี้: public class MyMessage { public MyMessage(String receiver) { this.receiver = receiver; } private String receiver; public void send() { //some implementation for sending the mssage to the receiver } } หากการกำหนดอินเตอร์เฟสสำหรับคลาสนี้เพื่อให้ฉันสามารถมีคลาสเพิ่มเติมซึ่งใช้อินเตอร์เฟสข้อความฉันสามารถกำหนดวิธีการส่งไม่ใช่ตัวสร้าง ดังนั้นฉันจะมั่นใจได้อย่างไรว่าการใช้งานคลาสนี้ทุกชุดมีตัวรับสัญญาณจริง ถ้าฉันใช้วิธีการเช่นsetReceiver(String receiver)ฉันไม่แน่ใจว่าวิธีนี้เรียกว่าจริง ๆ ในตัวสร้างฉันสามารถตรวจสอบได้
148 java  interface 

6
ตรวจสอบว่าคลาสของอินสแตนซ์ใช้อินเตอร์เฟสหรือไม่?
รับอินสแตนซ์ของคลาสเป็นไปได้ไหมที่จะพิจารณาว่าใช้อินเทอร์เฟซเฉพาะหรือไม่ เท่าที่ฉันรู้ไม่มีฟังก์ชั่นในตัวที่จะทำสิ่งนี้โดยตรง ฉันมีตัวเลือกอะไรบ้าง (ถ้ามี)
148 php  interface  oop 

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

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

2
คุณจะใช้ setter ส่วนตัวอย่างไรเมื่อใช้อินเตอร์เฟส?
ฉันได้สร้างส่วนต่อประสานที่มีคุณสมบัติบางอย่าง หากอินเตอร์เฟสนั้นไม่มีอยู่คุณสมบัติทั้งหมดของอ็อบเจ็กต์คลาสจะถูกตั้งค่าเป็น { get; private set; } อย่างไรก็ตามสิ่งนี้ไม่ได้รับอนุญาตเมื่อใช้อินเทอร์เฟซดังนั้นจะสามารถทำได้และหากเป็นเช่นนั้นได้อย่างไร

10
ทำไม Eclipse ถึงบ่นเกี่ยวกับ @Override เกี่ยวกับวิธีการอินเทอร์เฟซ
ฉันมีโปรเจ็กต์ที่มีอยู่ซึ่งใช้@Overrideเมธอดที่แทนที่เมธอดอินเตอร์เฟสแทนที่จะเป็นเมธอด superclass ฉันไม่สามารถแก้ไขรหัสนี้ได้ แต่ฉันต้องการให้ Eclpse หยุดบ่นเกี่ยวกับคำอธิบายประกอบเพราะฉันยังสามารถสร้างด้วย Maven ได้ ฉันจะปิดการใช้งานข้อผิดพลาดนี้ได้อย่างไร หมายเหตุ: เนื่องจากข้อกำหนดของโครงการฉันต้องคอมไพล์สำหรับ Java 1.5

3
C #: คลาสนามธรรมจำเป็นต้องใช้อินเทอร์เฟซหรือไม่?
รหัสทดสอบของฉันใน C #: namespace DSnA { public abstract class Test : IComparable { } } ผลลัพธ์ในข้อผิดพลาดของคอมไพเลอร์ต่อไปนี้: error CS0535: 'DSnA.Test' does not implement interface member 'System.IComparable.CompareTo(object)' เนื่องจากคลาสTestเป็นคลาสนามธรรมเหตุใดคอมไพเลอร์จึงกำหนดให้ใช้อินเทอร์เฟซ ข้อกำหนดนี้ไม่ควรบังคับสำหรับชั้นเรียนที่เป็นรูปธรรมเท่านั้นหรือ?

7
“ โปรแกรมไปยังอินเทอร์เฟซไม่ใช่การใช้งาน” หมายความว่าอย่างไร
มีคนหนึ่งสะดุดกับวลีนี้เมื่ออ่านเกี่ยวกับรูปแบบการออกแบบ แต่ฉันไม่เข้าใจมีใครช่วยอธิบายเรื่องนี้ให้ฉันได้ไหม

4
ใน C # คลาสสามารถสืบทอดจากคลาสอื่นและอินเตอร์เฟสได้หรือไม่?
ฉันต้องการทราบว่าคลาสสามารถสืบทอดจากคลาสและส่วนต่อประสานได้หรือไม่ ตัวอย่างโค้ดด้านล่างใช้งานไม่ได้ แต่ฉันคิดว่ามันบ่งบอกถึงสิ่งที่ฉันต้องการจะทำ เหตุผลที่ฉันต้องการทำเช่นนี้เป็นเพราะ บริษัท ของฉันทำ USB, ซีเรียล, อีเธอร์เน็ตและอุปกรณ์อื่น ๆ ฉันกำลังพยายามพัฒนาส่วนประกอบ / อินเตอร์เฟสทั่วไปที่ฉันสามารถใช้เพื่อเขียนโปรแกรมสำหรับอุปกรณ์ทั้งหมดของเราที่จะช่วยให้สิ่งต่าง ๆ (เช่นการเชื่อมต่อการตัดการเชื่อมต่อการรับเฟิร์มแวร์) เหมือนกันสำหรับแอปพลิเคชันทั้งหมดของเรา เพื่อเพิ่มคำถามนี้: ถ้า GenericDevice อยู่ในโครงการที่แตกต่างกันฉันสามารถใส่อินเทอร์เฟซ IOurDevices ในโครงการนั้นจากนั้นให้คลาส USBDevice ใช้อินเทอร์เฟซถ้าฉันเพิ่มการอ้างอิงถึงโครงการแรกหรือไม่ เพราะต้องการอ้างอิงเพียงหนึ่งโครงการจากนั้นใช้อินเทอร์เฟซที่แตกต่างกันขึ้นอยู่กับว่าอุปกรณ์คืออะไร class GenericDevice { private string _connectionState; public connectionState { get{return _connectionState; } set{ _connectionState = value;} } } interface IOurDevices { void connectToDevice(); void DisconnectDevice(); …

5
Java8: เหตุใดจึงห้ามไม่ให้กำหนดวิธีการเริ่มต้นสำหรับวิธีการจาก java.lang.Object
วิธีการเริ่มต้นเป็นเครื่องมือใหม่ที่ดีในกล่องเครื่องมือ Java ของเรา อย่างไรก็ตามฉันพยายามเขียนอินเทอร์เฟซที่กำหนดdefaultเวอร์ชันของtoStringวิธีการ Java บอกฉันว่าสิ่งนี้เป็นสิ่งต้องห้ามเนื่องจากวิธีการที่ประกาศไว้java.lang.Objectอาจไม่ได้รับการdefaultแก้ไข เหตุใดจึงเป็นเช่นนี้ ฉันรู้ว่ามีกฎ "คลาสฐานเสมอชนะ" ดังนั้นโดยค่าเริ่มต้น (pun;) defaultการใช้งานObjectเมธอดใด ๆจะถูกเขียนทับโดยวิธีการObjectต่อไป อย่างไรก็ตามฉันไม่เห็นเหตุผลว่าทำไมจึงไม่ควรมีข้อยกเว้นสำหรับวิธีการจากObjectในข้อมูลจำเพาะ โดยเฉพาะอย่างยิ่งสำหรับtoStringการใช้งานเริ่มต้นอาจมีประโยชน์มาก แล้วอะไรคือสาเหตุที่นักออกแบบ Java ตัดสินใจไม่อนุญาตให้ใช้defaultวิธีการแทนที่เมธอดจากObject?

9
แสดงความคิดเห็นอินเทอร์เฟซการใช้งานหรือทั้งสองอย่าง?
ฉันคิดว่าเราทุกคน (เมื่อเราสามารถใส่ใจ!) แสดงความคิดเห็นอินเทอร์เฟซของเรา เช่น /// <summary> /// Foo Interface /// </summary> public interface Foo { /// <summary> /// Will 'bar' /// </summary> /// <param name="wibble">Wibble factor</param> void Bar(string wibble); } คุณยังแสดงความคิดเห็นการดำเนินการ (ซึ่งอาจมีให้กับลูกค้าเช่นเป็นส่วนหนึ่งของห้องสมุด aa)? ถ้าเป็นเช่นนั้นคุณจะจัดการทำให้ทั้งสองซิงค์กันได้อย่างไร หรือคุณเพียงแค่เพิ่มความคิดเห็น 'ดูอินเตอร์เฟซสำหรับเอกสารประกอบ'? ขอบคุณ
128 c#  java  comments  interface 

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

1
สามารถใช้วิธีการขยายกับอินเทอร์เฟซได้หรือไม่?
เป็นไปได้ไหมที่จะใช้วิธีการขยายกับอินเทอร์เฟซ (คำถาม C #) ตัวอย่างเช่นเพื่อให้บรรลุสิ่งต่อไปนี้: สร้างอินเทอร์เฟซ ITopology สร้างเมธอดส่วนขยายสำหรับอินเทอร์เฟซนี้ (เช่น public static int CountNodes (ITopology topologyIf นี้)) จากนั้นเมื่อสร้างคลาส (เช่น MyGraph) ซึ่งใช้ ITopology มันจะมีส่วนขยาย Count Nodes โดยอัตโนมัติ วิธีนี้คลาสที่ใช้อินเทอร์เฟซไม่จำเป็นต้องมีชื่อคลาสที่กำหนดเพื่อให้สอดคล้องกับสิ่งที่กำหนดไว้ในเมธอดส่วนขยาย

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