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

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

7
ทำไมเราไม่สามารถประกาศ std :: vector <AbstractClass>
หลังจากใช้เวลาในการพัฒนา C # อยู่พอสมควรฉันสังเกตเห็นว่าหากคุณประกาศคลาสนามธรรมเพื่อใช้เป็นอินเทอร์เฟซคุณจะไม่สามารถสร้างอินสแตนซ์เวกเตอร์ของคลาสนามธรรมนี้เพื่อเก็บอินสแตนซ์ของคลาสเด็กได้ #pragma once #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class IFunnyInterface { public: virtual void IamFunny() = 0; }; class FunnyImpl: IFunnyInterface { public: virtual void IamFunny() { cout &lt;&lt; "&lt;INSERT JOKE HERE&gt;"; } }; class FunnyContainer { private: std::vector &lt;IFunnyInterface&gt; funnyItems; }; บรรทัดที่ประกาศเวกเตอร์ของคลาสนามธรรมทำให้เกิดข้อผิดพลาดนี้ใน MS VS2005: …

14
คลาสนามธรรมเทียบกับอินเตอร์เฟสใน Java
ฉันถูกถามคำถามฉันต้องการรับคำตอบของฉันตรวจสอบที่นี่ ถาม:ในสถานการณ์ใดที่เหมาะสมกว่าในการขยายคลาสนามธรรมมากกว่าการใช้อินเทอร์เฟซ ตอบ:หากเราใช้รูปแบบวิธีการออกแบบเทมเพลต ฉันถูกไหม ? ขออภัยหากไม่สามารถระบุคำถามได้อย่างชัดเจน ฉันรู้ความแตกต่างพื้นฐานระหว่างคลาสนามธรรมและอินเทอร์เฟซ 1) ใช้คลาสนามธรรมเมื่อความต้องการเป็นเช่นนั้นเราจำเป็นต้องใช้ฟังก์ชันเดียวกันในทุกคลาสย่อยสำหรับการดำเนินการเฉพาะ (ใช้วิธีการ) และฟังก์ชันการทำงานที่แตกต่างกันสำหรับการดำเนินการอื่น ๆ (เฉพาะลายเซ็นของวิธีการเท่านั้น) 2) ใช้อินเทอร์เฟซหากคุณต้องการกำหนดลายเซ็นให้เหมือนกัน (และการนำไปใช้งานที่แตกต่างกัน) เพื่อให้คุณสามารถปฏิบัติตามการใช้งานอินเทอร์เฟซได้ 3) เราสามารถขยายคลาสนามธรรมได้สูงสุดหนึ่งคลาส แต่สามารถใช้งานได้มากกว่าหนึ่งอินเทอร์เฟซ การย้ำคำถาม:มีสถานการณ์อื่น ๆ นอกเหนือจากที่กล่าวมาข้างต้นหรือไม่โดยเฉพาะที่เราต้องการให้ใช้คลาสนามธรรม (สิ่งที่เห็นคือรูปแบบวิธีการออกแบบเทมเพลตเป็นแนวคิดตามแนวคิดนี้เท่านั้น) อินเทอร์เฟซเทียบกับคลาสนามธรรม การเลือกระหว่างสองสิ่งนี้ขึ้นอยู่กับว่าคุณต้องการทำอะไร แต่โชคดีสำหรับเรา Erich Gamma สามารถช่วยเราได้เล็กน้อย เช่นเคยมีการปิด, อินเตอร์เฟซที่ช่วยให้คุณมีอิสระในเรื่องเกี่ยวกับชั้นฐานกับระดับนามธรรมจะช่วยให้คุณมีอิสระในการเพิ่มวิธีการใหม่ในภายหลัง - เอริชแกมมา คุณไม่สามารถเปลี่ยนอินเทอร์เฟซได้โดยไม่ต้องเปลี่ยนสิ่งอื่น ๆ มากมายในโค้ดของคุณดังนั้นวิธีเดียวที่จะหลีกเลี่ยงปัญหานี้ได้คือการสร้างอินเทอร์เฟซใหม่ทั้งหมดซึ่งอาจไม่ใช่สิ่งที่ดีเสมอไป Abstract classesควรใช้เป็นหลักสำหรับวัตถุที่เกี่ยวข้องอย่างใกล้ชิด Interfacesจะดีกว่าในการจัดหาฟังก์ชันการทำงานทั่วไปสำหรับคลาสที่ไม่เกี่ยวข้อง

10
วิธีทดสอบคลาสนามธรรมใน Java ด้วย JUnit
ฉันยังใหม่กับการทดสอบ Java ด้วย JUnit ฉันต้องทำงานกับ Java และฉันต้องการใช้การทดสอบหน่วย ปัญหาของฉันคือฉันมีคลาสนามธรรมที่มีวิธีนามธรรม แต่มีบางวิธีที่ไม่เป็นนามธรรม ฉันจะทดสอบคลาสนี้ด้วย JUnit ได้อย่างไร? ตัวอย่างรหัส (ง่ายมาก): abstract class Car { public Car(int speed, int fuel) { this.speed = speed; this.fuel = fuel; } private int speed; private int fuel; abstract void drive(); public int getSpeed() { return this.speed; } public int getFuel() …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.