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

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


27
ทำไมไม่สืบทอดจากรายการ <T>
เมื่อวางแผนโปรแกรมของฉันฉันมักจะเริ่มต้นด้วยความคิดอย่าง: ทีมฟุตบอลเป็นเพียงรายชื่อผู้เล่นฟุตบอล ดังนั้นฉันควรเป็นตัวแทนด้วย: var football_team = new List&lt;FootballPlayer&gt;(); การเรียงลำดับของรายการนี้แสดงถึงลำดับที่ผู้เล่นแสดงไว้ในบัญชีรายชื่อ แต่ฉันตระหนักในภายหลังว่าทีมยังมีคุณสมบัติอื่น ๆ นอกเหนือจากรายชื่อผู้เล่นที่ต้องบันทึกไว้ ตัวอย่างเช่นคะแนนรวมที่ดำเนินการอยู่ในฤดูกาลนี้งบประมาณปัจจุบันสีสม่ำเสมอstringชื่อตัวแทนของทีม ฯลฯ ดังนั้นฉันคิดว่า: โอเคทีมฟุตบอลก็เหมือนกับรายการของผู้เล่น แต่นอกจากนี้ยังมีชื่อ (a string) และคะแนนรวมทั้งหมด (an int) .NET ไม่มีคลาสสำหรับเก็บทีมฟุตบอลดังนั้นฉันจะสร้างคลาสของตัวเอง โครงสร้างที่มีอยู่ที่คล้ายกันและเกี่ยวข้องมากที่สุดคือList&lt;FootballPlayer&gt;ดังนั้นฉันจะสืบทอดจากมัน: class FootballTeam : List&lt;FootballPlayer&gt; { public string TeamName; public int RunningTotal } แต่มันกลับกลายเป็นว่าแนวทางในการพูดว่าคุณไม่ควรสืบทอดมาจาก List&lt;T&gt;ฉันสับสนอย่างละเอียดโดยแนวทางนี้สองประการ ทำไมจะไม่ล่ะ? เห็นได้ชัดว่ามีการเพิ่มประสิทธิภาพอย่างใดเพื่อให้ได้ประสิทธิภาพList งั้นเหรอ ฉันจะทำให้เกิดปัญหาประสิทธิภาพการทำงานถ้าฉันขยายList? จะเกิดอะไรขึ้น เหตุผลที่ผมเคยเห็นก็คือการที่Listให้บริการโดยไมโครซอฟท์และผมสามารถควบคุมมันไม่ได้ดังนั้นฉันไม่สามารถเปลี่ยนได้ในภายหลังหลังจากเปิดเผย "ประชาชน API" แต่ฉันพยายามเข้าใจสิ่งนี้ API สาธารณะคืออะไรและทำไมฉันจึงควรใส่ใจ …
1398 c#  .net  list  oop  inheritance 

7
อะไรคือความแตกต่างระหว่าง type () และ isinstance ()?
อะไรคือความแตกต่างระหว่างส่วนย่อยของโค้ดทั้งสองนี้ การใช้type(): import types if type(a) is types.DictType: do_something() if type(b) in types.StringTypes: do_something_else() การใช้isinstance(): if isinstance(a, dict): do_something() if isinstance(b, str) or isinstance(b, unicode): do_something_else()
1247 python  oop  inheritance  types 

6
คลาส Python สืบทอดวัตถุ
มีเหตุผลใดสำหรับการประกาศคลาสเพื่อสืบทอดจากobject? ฉันเพิ่งพบรหัสบางอย่างที่ทำสิ่งนี้และฉันไม่สามารถหาเหตุผลที่ดีได้ class MyClass(object): # class code follows...
1243 python  class  oop  object  inheritance 

3
ความแตกต่างของขอบเขตมรดกต้นแบบ / ต้นแบบใน AngularJS คืออะไร?
อ้างอิง API หน้าขอบเขตพูดว่า: ขอบเขตสามารถสืบทอดจากขอบเขตพาเรนต์ ผู้พัฒนาคู่มือหน้าขอบเขตพูดว่า: ขอบเขต (ต้นแบบ) สืบทอดคุณสมบัติจากขอบเขตพาเรนต์ ดังนั้นขอบเขตของลูกจะสืบทอดต้นแบบจากขอบเขตหลักเสมอหรือไม่? มีข้อยกเว้นหรือไม่ เมื่อมันรับช่วงมันจะสืบทอดมรดกต้นแบบ JavaScript ปกติหรือไม่

15
ความแตกต่างระหว่างการสืบทอดส่วนบุคคลสาธารณะและการป้องกัน
ความแตกต่างระหว่างคืออะไรpublic, privateและprotectedมรดกในc ++? คำถามทั้งหมดที่ฉันพบในการจัดการกับกรณีเฉพาะ


17
List <Dog> เป็นคลาสย่อยของ List <Animal> หรือไม่ ทำไม Java generics ถึงไม่ polymorphic โดยปริยาย?
ฉันสับสนเล็กน้อยเกี่ยวกับวิธีที่ Java generics จัดการกับการสืบทอด / polymorphism สมมติว่าลำดับชั้นดังต่อไปนี้ - สัตว์ (ผู้ปกครอง) สุนัข - แมว (เด็ก) doSomething(List&lt;Animal&gt; animals)ดังนั้นคิดว่าฉันมีวิธี ตามกฎของมรดกและ polymorphism ทั้งหมดผมจะคิดว่าList&lt;Dog&gt; เป็นList&lt;Animal&gt;และList&lt;Cat&gt; เป็นList&lt;Animal&gt; - และเพื่อคนใดคนหนึ่งอาจจะส่งผ่านไปยังวิธีการนี้ ไม่เช่นนั้น ถ้าผมต้องการที่จะบรรลุพฤติกรรมนี้ผมต้องบอกอย่างชัดเจนวิธีการที่จะยอมรับรายการ subclass ของสัตว์ใด ๆ doSomething(List&lt;? extends Animal&gt; animals)โดยกล่าวว่า ฉันเข้าใจว่านี่เป็นพฤติกรรมของ Java คำถามของฉันคือทำไม ? ทำไมความแตกต่างหลากหลายโดยปริยาย แต่เมื่อพูดถึงเรื่องทั่วไปมันจะต้องระบุ?



15
เรียกวิธีการเรียนของผู้ปกครองจากชั้นเรียนเด็ก?
เมื่อสร้างลำดับชั้นวัตถุแบบง่าย ๆ ใน Python ฉันต้องการที่จะสามารถเรียกใช้เมธอดของคลาสพาเรนต์จากคลาสที่ได้รับ ใน Perl และ Java มีคำสำคัญสำหรับสิ่งนี้ ( super) ใน Perl ฉันอาจทำสิ่งนี้: package Foo; sub frotz { return "Bamf"; } package Bar; @ISA = qw(Foo); sub frotz { my $str = SUPER::frotz(); return uc($str); } ใน Python ดูเหมือนว่าฉันต้องตั้งชื่อคลาส parent อย่างชัดเจนจาก child Foo::frotz()ในตัวอย่างข้างต้นที่ผมจะต้องทำสิ่งที่ชอบ สิ่งนี้ดูไม่ถูกต้องเนื่องจากพฤติกรรมนี้ทำให้ยากที่จะสร้างลำดับชั้นลึก หากเด็กจำเป็นต้องรู้ว่าคลาสใดที่กำหนดวิธีการสืบทอดมาจากนั้นความเจ็บปวดด้านข้อมูลทุกประเภทจะถูกสร้างขึ้น นี่เป็นข้อ จำกัด ที่แท้จริงในหลามช่องว่างในความเข้าใจของฉันหรือทั้งสองอย่าง?

7
วิธีการเรียกฟังก์ชั่นระดับผู้ปกครองจากฟังก์ชั่นระดับที่ได้รับ?
ฉันจะเรียกใช้ฟังก์ชัน parent จากคลาสที่ได้รับโดยใช้ C ++ ได้อย่างไร ตัวอย่างเช่นฉันมีชั้นเรียนที่เรียกว่าparentและชั้นเรียนที่เรียกว่าchildมาจากผู้ปกครอง ภายในแต่ละชั้นมีprintฟังก์ชั่น ในคำจำกัดความของฟังก์ชั่นการพิมพ์ของเด็กฉันต้องการโทรไปยังฟังก์ชั่นการพิมพ์ของผู้ปกครอง ฉันจะทำสิ่งนี้อย่างไร
603 c++  oop  inheritance 

9
'super' ใน Python คืออะไร
ความแตกต่างระหว่าง: class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() และ: class Child(SomeBaseClass): def __init__(self): SomeBaseClass.__init__(self) ฉันเห็นว่าsuperมีการใช้งานค่อนข้างมากในชั้นเรียนที่มีการสืบทอดเพียงครั้งเดียวเท่านั้น ฉันเห็นได้ว่าทำไมคุณถึงใช้มันในหลาย ๆ มรดก แต่ไม่ชัดเจนว่าข้อดีของการใช้มันในสถานการณ์แบบนี้คืออะไร
564 python  oop  inheritance  super 



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