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

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

10
การแทนที่คุณสมบัติที่เก็บไว้ใน Swift
ฉันสังเกตเห็นว่าคอมไพเลอร์ไม่ยอมให้ฉันแทนที่คุณสมบัติที่เก็บไว้ด้วยค่าอื่นที่เก็บไว้ (ซึ่งดูแปลก): class Jedi { var lightSaberColor = "Blue" } class Sith: Jedi { override var lightSaberColor = "Red" // Cannot override with a stored property lightSaberColor } อย่างไรก็ตามฉันได้รับอนุญาตให้ทำสิ่งนี้กับคุณสมบัติที่คำนวณได้: class Jedi { let lightSaberColor = "Blue" } class Sith: Jedi { override var lightSaberColor : String{return "Red"} } เหตุใดฉันจึงไม่ได้รับอนุญาตให้ให้ค่าอื่น เหตุใดการลบล้างทรัพย์สินที่เก็บไว้จึงเป็นสิ่งที่น่ารังเกียจและทำด้วยโคเชอร์ที่คำนวณได้ …

4
การสืบทอด JavaScript: Object.create vs new
ใน JavaScript ความแตกต่างระหว่างสองตัวอย่างนี้คืออะไร: วิชาบังคับก่อน: function SomeBaseClass(){ } SomeBaseClass.prototype = { doThis : function(){ }, doThat : function(){ } } ตัวอย่างการสืบทอด A โดยใช้ Object.create: function MyClass(){ } MyClass.prototype = Object.create(SomeBaseClass.prototype); ตัวอย่างการสืบทอด B โดยใช้คำหลักใหม่ function MyClass(){ } MyClass.prototype = new SomeBaseClass(); ทั้งสองตัวอย่างดูเหมือนจะทำในสิ่งเดียวกัน คุณจะเลือกอย่างใดอย่างหนึ่งเมื่อใด คำถามเพิ่มเติม: พิจารณาโค้ดในลิงค์ด้านล่าง (บรรทัดที่ 15) ซึ่งการอ้างอิงถึงคอนสตรัคเตอร์ของฟังก์ชันจะถูกเก็บไว้ในต้นแบบ เหตุใดจึงมีประโยชน์ https://github.com/mrdoob/three.js/blob/master/src/loaders/ImageLoader.js ข้อความที่ตัดตอนมา (หากคุณไม่ต้องการเปิดลิงก์): …


8
เหตุใดเราจึงไม่ควรใช้การป้องกันแบบคงที่ใน java
ฉันกำลังเจอคำถามนี้มีวิธีลบล้างตัวแปรคลาสใน Java หรือไม่? ความคิดเห็นแรกที่มี 36 upvotes คือ: ถ้าคุณเคยเห็นให้protected staticเรียกใช้ ใครสามารถอธิบายได้ว่าทำไมprotected staticขมวดคิ้ว?

3
นี่คือสปาร์ตาหรือมัน?
ต่อไปนี้เป็นคำถามสัมภาษณ์ ฉันคิดวิธีแก้ปัญหาขึ้นมา แต่ไม่แน่ใจว่าทำไมถึงได้ผล คำถาม: โดยไม่มีการแก้ไขSpartaระดับเขียนโค้ดบางอย่างที่ทำให้ผลตอบแทนMakeItReturnFalsefalse public class Sparta : Place { public bool MakeItReturnFalse() { return this is Sparta; } } วิธีแก้ปัญหาของฉัน: (สปอยเลอร์) public class Place { public interface Sparta { } } แต่ทำไมSpartaในMakeItReturnFalse()หมายถึง{namespace}.Place.Spartaแทน{namespace}.Sparta?

4
มีบางอย่างเช่น Annotation Inheritance ใน java หรือไม่?
ฉันกำลังสำรวจคำอธิบายประกอบและมาถึงจุดที่ดูเหมือนว่าคำอธิบายประกอบบางส่วนจะมีลำดับชั้น ฉันใช้คำอธิบายประกอบเพื่อสร้างโค้ดในพื้นหลังสำหรับการ์ด การ์ดมีหลายประเภท (รหัสและคำอธิบายประกอบที่แตกต่างกัน) แต่มีองค์ประกอบบางอย่างที่เหมือนกันเช่นชื่อ @Target(value = {ElementType.TYPE}) public @interface Move extends Page{ String method1(); String method2(); } และนี่จะเป็นคำอธิบายประกอบทั่วไป: @Target(value = {ElementType.TYPE}) public @interface Page{ String method3(); } ในตัวอย่างด้านบนฉันคาดว่า Move to inherit method3 แต่ฉันได้รับคำเตือนว่าขยายไม่ถูกต้องกับคำอธิบายประกอบ ฉันพยายามให้คำอธิบายประกอบขยายฐานทั่วไป แต่ไม่ได้ผล เป็นไปได้หรือเป็นเพียงปัญหาการออกแบบ

3
GetType () จะส่งคืนชนิดที่ได้รับมากที่สุดเมื่อเรียกจากคลาสฐานหรือไม่?
GetType () จะส่งคืนชนิดที่ได้รับมากที่สุดเมื่อเรียกจากคลาสฐานหรือไม่? ตัวอย่าง: public abstract class A { private Type GetInfo() { return System.Attribute.GetCustomAttributes(this.GetType()); } } public class B : A { //Fields here have some custom attributes added to them } หรือฉันควรสร้างวิธีนามธรรมที่คลาสที่ได้รับจะต้องนำไปใช้ดังต่อไปนี้? public abstract class A { protected abstract Type GetSubType(); private Type GetInfo() { return System.Attribute.GetCustomAttributes(GetSubType()); } …

3
การถ่ายทอดทางพันธุกรรมแบบคลาสสิกกับการถ่ายทอดทางพันธุกรรมของต้นแบบในจาวาสคริปต์
ฉัน googled ลิงก์มากมายและไม่สามารถรับความคิดที่ดีเกี่ยวกับความแตกต่างระหว่างการสืบทอดแบบคลาสสิกกับการสืบทอดต้นแบบได้หรือไม่? ฉันได้เรียนรู้บางสิ่งจากสิ่งเหล่านี้ แต่ฉันยังสับสนเกี่ยวกับแนวคิด ประโยชน์ของการสืบทอดต้นแบบมากกว่าคลาสสิก? http://aaditmshah.github.io/why-prototypal-inheritance-matters/ การสืบทอดคลาสสิก // Shape - superclass function Shape() { this.x = 0; this.y = 0; } //superclass method Shape.prototype.move = function(x, y) { this.x += x; this.y += y; console.info("Shape moved."); }; // Rectangle - subclass function Rectangle() { Shape.call(this); //call super constructor. } …

6
JavaScript OOP ใน NodeJS: อย่างไร
ฉันคุ้นเคยกับ OOP แบบคลาสสิกเช่นเดียวกับใน Java แนวทางปฏิบัติที่ดีที่สุดในการทำ OOP ใน JavaScript โดยใช้ NodeJS คืออะไร? แต่ละ Class เป็นไฟล์ที่มีmodule.export? จะสร้างชั้นเรียนได้อย่างไร? this.Class = function() { //constructor? var privateField = "" this.publicField = "" var privateMethod = function() {} this.publicMethod = function() {} } เทียบกับ (ฉันไม่แน่ใจว่าถูกต้องด้วยซ้ำ) this.Class = { privateField: "" , privateMethod: function() {} , return …

4
สืบทอดมาจากคลาสพื้นฐานทั่วไปใช้ข้อ จำกัด และใช้อินเทอร์เฟซใน C #
นี่คือคำถามเกี่ยวกับไวยากรณ์ ฉันมีคลาสทั่วไปที่สืบทอดมาจากคลาสพื้นฐานทั่วไปและกำลังใช้ข้อ จำกัด กับพารามิเตอร์ชนิดหนึ่ง ฉันยังต้องการให้คลาสที่ได้รับมาใช้อินเทอร์เฟซ สำหรับชีวิตของฉันดูเหมือนว่าฉันไม่สามารถเข้าใจไวยากรณ์ที่ถูกต้องได้ นี่คือสิ่งที่ฉันมี: DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... } สิ่งแรกที่นึกถึงคือ: DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... } แต่นั่นไม่ถูกต้องเนื่องจากทำให้ T2 จำเป็นต้องใช้ทั้ง IBar และ IFoo ไม่ใช่ DerivedFoo เพื่อใช้ IFoo ฉันได้ลองใช้ Googling ใช้เครื่องหมายทวิภาคอัฒภาค ฯลฯ แล้ว แต่กลับสั้นลง ฉันแน่ใจว่าคำตอบนั้นง่ายมาก


7
เข้าถึงเขตข้อมูลที่สืบทอดส่วนตัวผ่านการสะท้อนใน Java
ฉันพบวิธีรับสมาชิกที่สืบทอดผ่าน class.getDeclaredFields(); และเข้าถึงสมาชิกส่วนตัวผ่านclass.getFields() แต่ฉันกำลังมองหาเขตข้อมูลที่สืบทอดแบบส่วนตัว ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?

4
Python super () เพิ่ม TypeError
ใน Python 2.5 โค้ดต่อไปนี้ทำให้เกิดTypeError: >>> class X: def a(self): print "a" >>> class Y(X): def a(self): super(Y,self).a() print "b" >>> c = Y() >>> c.a() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in a TypeError: super() argument 1 must be type, not …

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

6
การสืบทอดจากคลาสเทมเพลตใน c ++
สมมติว่าเรามีคลาสเทมเพลตAreaซึ่งมีตัวแปรสมาชิกT areaa T getArea()และvoid setArea(T)ฟังก์ชันสมาชิก ฉันสามารถสร้างวัตถุชนิดโดยเฉพาะการพิมพ์AreaArea<int> ตอนนี้ฉันมีคลาสRectangleที่สืบทอดAreaคลาส เนื่องจากRectangleตัวมันเองไม่ใช่เทมเพลตฉันจึงไม่สามารถพิมพ์Rectangle<int>ได้ ฉันจะเชี่ยวชาญAreaประเภทที่สืบทอดมาสำหรับRectangleวัตถุได้อย่างไร แก้ไข: ขออภัยฉันลืมที่จะชี้แจง - คำถามของฉันคือเป็นไปได้หรือไม่ที่จะสืบทอด Area โดยไม่เชี่ยวชาญดังนั้นจึงไม่ได้รับการสืบทอดเป็น Area of ​​ints แต่เนื่องจาก Area Rectangle สามารถเชี่ยวชาญประเภทสำหรับ

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