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

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

27
อะไรคือความแตกต่างระหว่างฟังก์ชั่นนามธรรมและฟังก์ชั่นเสมือนจริง?
อะไรคือความแตกต่างระหว่างฟังก์ชั่นนามธรรมและฟังก์ชั่นเสมือนจริง? แนะนำให้ใช้ virtual หรือ abstract ในกรณีใด วิธีใดเป็นวิธีที่ดีที่สุด

16
เรายกระดับนามธรรมได้หรือไม่?
ในระหว่างการสัมภาษณ์ของฉันฉันถูกถามว่า "ถ้าเราสามารถสร้างคลาสนามธรรมได้หรือไม่" คำตอบของฉันคือ "ไม่เราไม่สามารถทำได้" แต่ผู้สัมภาษณ์บอกฉันว่า "ผิดเราทำได้" ฉันโต้เถียงเล็กน้อยเกี่ยวกับเรื่องนี้ จากนั้นเขาบอกให้ฉันลองทำเองที่บ้าน abstract class my { public void mymethod() { System.out.print("Abstract"); } } class poly { public static void main(String a[]) { my m = new my() {}; m.mymethod(); } } ที่นี่ฉันกำลังสร้างตัวอย่างของชั้นเรียนของฉันและวิธีการโทรของชั้นนามธรรม ใครช่วยอธิบายเรื่องนี้ให้ฉันหน่อยได้ไหม ฉันผิดในระหว่างการสัมภาษณ์หรือไม่?
573 java  oop  class  object  abstract 

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__วิธีการของซูเปอร์คลาส มีวิธีที่ดีกว่าในการกำหนดคลาสนามธรรม?

9
Java abstract interface
พิจารณาตัวอย่าง (ซึ่งคอมไพล์ใน java) public abstract interface Interface { public void interfacing(); public abstract boolean interfacing(boolean really); } ทำไมมันจำเป็นสำหรับอินเทอร์เฟซที่จะเป็นนามธรรม "ประกาศ"? มีกฎอื่น ๆ ที่ใช้กับอินเทอร์เฟซแบบนามธรรมหรือไม่? ในที่สุด: หากabstractล้าสมัยแล้วทำไมจึงรวมอยู่ใน Java มีประวัติสำหรับส่วนต่อประสานนามธรรมหรือไม่?
197 java  interface  abstract 

3
ฉันจะทราบได้อย่างไรว่าคลาส Java เป็นนามธรรมจากการสะท้อนกลับ
ฉันกำลังเรียนผ่านชั้นเรียนในไฟล์ Jar และต้องการค้นหาสิ่งที่ไม่เป็นนามธรรม ฉันสามารถแก้ปัญหานี้ได้โดยการสร้างคลาสและดักจับ InstantiationException แต่อินสแตนซ์นั้นมีประสิทธิภาพในการทำงานเนื่องจากบางคลาสมีการเริ่มต้นอย่างหนัก ฉันไม่พบสิ่งที่ชัดเจนเหมือน isAbstract () ในเอกสาร Class.java
184 java  class  abstract 

8
ขยายคลาสข้อมูลใน Kotlin
คลาสข้อมูลดูเหมือนจะแทนที่ POJO ที่ล้าสมัยใน Java ค่อนข้างคาดหวังว่าคลาสเหล่านี้จะอนุญาตให้มีการสืบทอด แต่ฉันไม่เห็นวิธีที่สะดวกในการขยายคลาสข้อมูล สิ่งที่ฉันต้องการคือสิ่งนี้: open data class Resource (var id: Long = 0, var location: String = "") data class Book (var isbn: String) : Resource() รหัสข้างต้นล้มเหลวเนื่องจากการปะทะกันของcomponent1()วิธีการ การเพิ่มdataคำอธิบายประกอบทิ้งไว้ในคลาสใดคลาสหนึ่งเท่านั้นก็ไม่ทำงานเช่นกัน อาจมีสำนวนอื่นในการขยายคลาสข้อมูลหรือไม่ UPD: ฉันอาจใส่คำอธิบายประกอบเป็นคลาสย่อยของเด็กเท่านั้น แต่dataคำอธิบายประกอบจะจัดการกับคุณสมบัติที่ประกาศใน Constructor เท่านั้น นั่นคือฉันจะต้องประกาศคุณสมบัติของผู้ปกครองทั้งหมดopenและแทนที่พวกเขาซึ่งน่าเกลียด: open class Resource (open var id: Long = 0, open var location: …

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

8
เหตุใด PHP 5.2+ จึงไม่อนุญาตวิธีการคลาสแบบคงที่แบบนามธรรม
หลังจากเปิดใช้คำเตือนที่เข้มงวดใน PHP 5.2 ฉันเห็นคำเตือนมาตรฐานที่เข้มงวดมากมายจากโครงการที่เขียนขึ้นโดยไม่มีคำเตือนที่เข้มงวด: มาตรฐานที่เข้มงวด : ฟังก์ชันคงที่โปรแกรม :: getSelectSQL () ไม่ควรเป็นนามธรรมใน Program.class.inc ฟังก์ชันที่เป็นปัญหาเป็นของโปรแกรมคลาสพาเรนต์ที่เป็นนามธรรมและได้รับการประกาศว่าเป็นแบบคงที่เนื่องจากควรนำไปใช้ในคลาสย่อยเช่น TVProgram ฉันพบการอ้างอิงถึงการเปลี่ยนแปลงนี้ที่นี่ : ทิ้งฟังก์ชันคลาสคงที่ที่เป็นนามธรรม เนื่องจากการกำกับดูแล PHP 5.0.x และ 5.1.x จึงอนุญาตให้ใช้ฟังก์ชันคงที่ที่เป็นนามธรรมในคลาส ใน PHP 5.2.x มีเพียงอินเทอร์เฟซเท่านั้นที่สามารถมีได้ คำถามของฉันคือใครสามารถอธิบายได้อย่างชัดเจนว่าเหตุใดจึงไม่ควรมีฟังก์ชันคงที่ที่เป็นนามธรรมใน PHP
121 php  oop  static  abstract 


16
ฉันจะสร้างคลาสพื้นฐานนามธรรมใน JavaScript ได้อย่างไร
เป็นไปได้ไหมที่จะจำลองคลาสพื้นฐานแบบนามธรรมใน JavaScript วิธีที่สง่างามที่สุดที่จะทำคืออะไร? พูดว่าฉันต้องการทำสิ่งที่ชอบ: - var cat = new Animal('cat'); var dog = new Animal('dog'); cat.say(); dog.say(); ควรส่งออก: 'bark', 'meow'
109 javascript  oop  abstract 

6
เหตุใดวิธีการเชื่อมต่อ C # จึงไม่ประกาศว่าเป็นนามธรรมหรือเสมือน
วิธีการ C # ในอินเทอร์เฟซถูกประกาศโดยไม่ใช้virtualคีย์เวิร์ดและแทนที่ในคลาสที่ได้รับโดยไม่ต้องใช้overrideคีย์เวิร์ด มีเหตุผลนี้หรือไม่? ฉันคิดว่ามันเป็นเพียงความสะดวกทางภาษาและเห็นได้ชัดว่า CLR รู้วิธีจัดการสิ่งนี้ภายใต้ฝาครอบ (วิธีการไม่ใช่เสมือนตามค่าเริ่มต้น) แต่มีเหตุผลทางเทคนิคอื่น ๆ หรือไม่? นี่คือ IL ที่คลาสที่ได้รับสร้างขึ้น: class Example : IDisposable { public void Dispose() { } } .method public hidebysig newslot virtual final instance void Dispose() cil managed { // Code size 2 (0x2) .maxstack 8 IL_0000: nop IL_0001: ret } …

5
ทำไมไม่เป็นสาขานามธรรม?
เหตุใดคลาส Java จึงไม่มีฟิลด์นามธรรมเช่นเดียวกับที่สามารถมีวิธีนามธรรมได้ ตัวอย่างเช่นฉันมีสองคลาสที่ขยายคลาสพื้นฐานนามธรรมเดียวกัน ทั้งสองคลาสนี้แต่ละคลาสมีวิธีการที่เหมือนกันยกเว้นค่าคงที่ของสตริงซึ่งเป็นข้อความแสดงข้อผิดพลาดภายในพวกเขา ถ้าฟิลด์เป็นนามธรรมฉันสามารถสร้างนามธรรมคงที่นี้และดึงเมธอดขึ้นมาในคลาสฐาน แต่ฉันต้องสร้างเมธอดนามธรรมที่เรียกว่าgetErrMsg()ในกรณีนี้ที่ส่งคืน String แทนที่เมธอดนี้ในคลาสที่ได้รับสองคลาสจากนั้นฉันสามารถดึงเมธอดขึ้นมาได้ (ซึ่งตอนนี้เรียกว่าเมธอดนามธรรม) เหตุใดฉันจึงไม่สามารถสร้างบทคัดย่อภาคสนามขึ้นมาได้ Java ได้รับการออกแบบมาเพื่ออนุญาตสิ่งนี้หรือไม่?
102 java  methods  field  abstract 

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