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

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

6
ไม่สามารถใช้การสร้างคีย์คอลัมน์เอกลักษณ์กับ <union-subclass> (TABLE_PER_CLASS)
com.something.SuperClass: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class SuperClass implements Serializable { private static final long serialVersionUID = -695503064509648117L; long confirmationCode; @Id @GeneratedValue(strategy = GenerationType.AUTO) // Causes exception!!! public long getConfirmationCode() { return confirmationCode; } public void setConfirmationCode(long confirmationCode) { this.confirmationCode = confirmationCode; } } com.something.SubClass: @Entity public abstract class …

4
คลาสข้อผิดพลาดที่กำหนดเองของ Ruby: การสืบทอดแอตทริบิวต์ข้อความ
ดูเหมือนจะหาข้อมูลเกี่ยวกับคลาสข้อยกเว้นแบบกำหนดเองไม่ได้มากนัก สิ่งที่ฉันรู้ คุณสามารถประกาศคลาสข้อผิดพลาดที่กำหนดเองและปล่อยให้สืบทอดจากStandardErrorดังนั้นจึงเป็นrescued: class MyCustomError &lt; StandardError end สิ่งนี้ช่วยให้คุณสามารถเพิ่มได้โดยใช้: raise MyCustomError, "A message" และรับข้อความนั้นในภายหลังเมื่อช่วยชีวิต rescue MyCustomError =&gt; e puts e.message # =&gt; "A message" อะไรไม่รู้ ฉันต้องการยกเว้นฟิลด์ที่กำหนดเองของฉัน แต่ฉันต้องการสืบทอดmessageแอตทริบิวต์จากคลาสแม่ ผมพบว่าการอ่านในหัวข้อนี้ที่@messageไม่ได้เป็นตัวแปรเช่นการเรียนการยกเว้นดังนั้นฉันกังวลว่ามรดกของฉันจะไม่ทำงาน ใครสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ได้หรือไม่? ฉันจะใช้คลาสข้อผิดพลาดที่กำหนดเองกับobjectแอตทริบิวต์ได้อย่างไร ถูกต้องดังต่อไปนี้: class MyCustomError &lt; StandardError attr_reader :object def initialize(message, object) super(message) @object = object end end แล้ว: raise MyCustomError.new(anObject), "A …

9
การสืบทอดความคิดเห็นสำหรับ C # (จริงๆแล้วภาษาใดก็ได้)
สมมติว่าฉันมีอินเทอร์เฟซนี้ public interface IFoo { ///&lt;summary&gt; /// Foo method ///&lt;/summary&gt; void Foo(); ///&lt;summary&gt; /// Bar method ///&lt;/summary&gt; void Bar(); ///&lt;summary&gt; /// Situation normal ///&lt;/summary&gt; void Snafu(); } และชั้นนี้ public class Foo : IFoo { public void Foo() { ... } public void Bar() { ... } public void Snafu() { …

10
เหตุใด C ++ จึงไม่อนุญาตให้สืบทอดมิตรภาพ
เหตุใดอย่างน้อยมิตรภาพจึงไม่สามารถสืบทอดได้ใน C ++? ฉันเข้าใจว่าการเคลื่อนย้ายและการสะท้อนกลับถูกห้ามด้วยเหตุผลที่ชัดเจน (ฉันพูดสิ่งนี้เพื่อตัดคำตอบของใบเสนอราคาคำถามที่พบบ่อยธรรมดา ๆ เท่านั้น) แต่ฉันขาดบางสิ่งบางอย่างตามแนวของvirtual friend class Foo;ปริศนา มีใครทราบความเป็นมาทางประวัติศาสตร์เบื้องหลังการตัดสินใจครั้งนี้บ้าง? มิตรภาพเป็นเพียงการแฮ็คที่ จำกัด ซึ่งนับตั้งแต่นั้นมาก็กลายเป็นการใช้งานที่น่านับถือที่คลุมเครือไม่กี่อย่าง? แก้ไขเพื่อความกระจ่าง:ฉันกำลังพูดถึงสถานการณ์ต่อไปนี้ไม่ใช่ที่ที่เด็กของ A สัมผัสกับ B หรือทั้ง B และลูก ๆ ของมัน ฉันยังสามารถจินตนาการได้ว่าการอนุญาตให้เข้าถึงการลบล้างฟังก์ชันของเพื่อนเป็นต้น class A { int x; friend class B; }; class B { // OK as per friend declaration above. void foo(A&amp; a, int n) { …

3
ฉันจะสร้างคลาสที่ได้รับแบบไดนามิกจากคลาสพื้นฐานได้อย่างไร
ตัวอย่างเช่นฉันมีคลาสพื้นฐานดังนี้: class BaseClass(object): def __init__(self, classtype): self._type = classtype จากคลาสนี้ฉันได้รับคลาสอื่น ๆ อีกมากมายเช่น class TestClass(BaseClass): def __init__(self): super(TestClass, self).__init__('Test') class SpecialClass(BaseClass): def __init__(self): super(TestClass, self).__init__('Special') มีวิธี pythonic ที่ดีในการสร้างคลาสเหล่านั้นแบบไดนามิกโดยการเรียกใช้ฟังก์ชันที่ทำให้คลาสใหม่อยู่ในขอบเขตปัจจุบันของฉันเช่น: foo(BaseClass, "My") a = MyClass() ... เนื่องจากจะมีความคิดเห็นและคำถามว่าทำไมฉันถึงต้องการสิ่งนี้: คลาสที่ได้รับทั้งหมดมีโครงสร้างภายในที่เหมือนกันโดยมีความแตกต่างกันนั่นคือตัวสร้างจะใช้อาร์กิวเมนต์ที่ไม่ได้กำหนดไว้ก่อนหน้า ดังนั้นสำหรับตัวอย่างเช่นMyClassใช้เวลาคำหลักaในขณะที่คอนสตรัคของชั้นTestClassใช้เวลาและbc inst1 = MyClass(a=4) inst2 = MyClass(a=5) inst3 = TestClass(b=False, c = "test") แต่ไม่ควรใช้ประเภทของคลาสเป็นอาร์กิวเมนต์อินพุตเช่น inst1 …

4
วิธีการสืบทอดและการเริ่มต้นใน Python
ฉันขอทานงูหลาม ฉันไม่เข้าใจเรื่องมรดกและ__init__(). class Num: def __init__(self,num): self.n1 = num class Num2(Num): def show(self): print self.n1 mynumber = Num2(8) mynumber.show() ผลลัพธ์: 8 ตกลง แต่ฉันแทนที่Num2ด้วย class Num2(Num): def __init__(self,num): self.n2 = num*2 def show(self): print self.n1,self.n2 ผลลัพธ์: Error. Num2 has no attribute "n1". ในกรณีนี้สามารถNum2เข้าถึงได้n1อย่างไร?

5
จำเป็นต้องใช้ฟังก์ชันเสมือนทั้งหมดในคลาสที่ได้รับมาหรือไม่?
นี่อาจดูเหมือนคำถามธรรมดา ๆ แต่ฉันหาคำตอบไม่ได้จากที่อื่น สมมติว่าฉันมีสิ่งต่อไปนี้: class Abstract { public: virtual void foo() = 0; virtual void bar(); } class Derived : Abstract { public: virtual void foo(); } เป็นไปได้หรือไม่ที่คลาส Derived ไม่ได้ใช้ฟังก์ชัน bar () จะเกิดอะไรขึ้นถ้าไม่ใช่คลาสที่ได้รับทั้งหมดของฉันต้องการฟังก์ชัน bar () แต่บางคลาสทำ ฟังก์ชันเสมือนทั้งหมดของคลาสพื้นฐานนามธรรมจำเป็นต้องนำไปใช้ในคลาสที่ได้รับมาหรือเพียงแค่ฟังก์ชั่นเสมือนจริงเท่านั้น ขอบคุณ
94 c++  inheritance 

9
รับชื่อของคลาสลูกในคลาสแม่ (บริบทคงที่)
ฉันกำลังสร้างห้องสมุด ORM โดยคำนึงถึงการใช้ซ้ำและความเรียบง่าย ทุกอย่างเป็นไปด้วยดียกเว้นว่าฉันติดอยู่กับข้อ จำกัด ทางมรดกที่โง่เขลา โปรดพิจารณารหัสด้านล่าง: class BaseModel { /* * Return an instance of a Model from the database. */ static public function get (/* varargs */) { // 1. Notice we want an instance of User $class = get_class(parent); // value: bool(false) $class = get_class(self); // value: …

7
ฉันจะรับชื่อคลาสจากการเรียกแบบคงที่ในคลาส PHP เพิ่มเติมได้อย่างไร
ฉันมีสองคลาส: ActionและMyAction. หลังถูกประกาศเป็น: class MyAction extends Action {/* some methods here */} สิ่งที่ฉันต้องการคือเมธอดในActionคลาส (เฉพาะในนั้นเนื่องจากจะมีคลาสที่สืบทอดมาจำนวนมากและฉันไม่ต้องการใช้เมธอดนี้ในทุกคลาส) ซึ่งจะส่งคืนชื่อคลาสจากการเรียกแบบคงที่ นี่คือสิ่งที่ฉันกำลังพูดถึง: Class Action { function n(){/* something */} } และเมื่อฉันเรียกมันว่า: MyAction::n(); // it should return "MyAction" แต่การประกาศแต่ละครั้งในคลาสพาเรนต์มีสิทธิ์เข้าถึงเฉพาะ__CLASS__ตัวแปรคลาสพาเรนต์ซึ่งมีค่า“ Action” มีวิธีใดบ้างที่เป็นไปได้ในการดำเนินการนี้
93 php  oop  inheritance 

2
ฟังก์ชันที่มีชื่อเดียวกัน แต่มีลายเซ็นต่างกันในคลาสที่ได้รับ
ฉันมีฟังก์ชันที่มีชื่อเดียวกัน แต่มีลายเซ็นต่างกันในคลาสพื้นฐานและคลาสที่ได้รับ เมื่อฉันพยายามใช้ฟังก์ชันของคลาสพื้นฐานในคลาสอื่นที่สืบทอดมาจากที่ได้รับมาฉันได้รับข้อผิดพลาด ดูรหัสต่อไปนี้: class A { public: void foo(string s){}; }; class B : public A { public: int foo(int i){}; }; class C : public B { public: void bar() { string s; foo(s); } }; ฉันได้รับข้อผิดพลาดต่อไปนี้จากคอมไพเลอร์ gcc: In member function `void C::bar()': no matching function for call …

2
การสืบทอด Python: TypeError: object .__ init __ () ไม่มีพารามิเตอร์
ฉันได้รับข้อผิดพลาดนี้: TypeError: object.__init__() takes no parameters เมื่อรันโค้ดของฉันฉันไม่เห็นว่าฉันทำอะไรผิดที่นี่: class IRCReplyModule(object): activated=True moduleHandlerResultList=None moduleHandlerCommandlist=None modulename="" def __init__(self,modulename): self.modulename = modulename class SimpleHelloWorld(IRCReplyModule): def __init__(self): super(IRCReplyModule,self).__init__('hello world')

4
การสืบทอดคลาสเคส Scala
ฉันมีแอปพลิเคชันที่ใช้ Squeryl ฉันกำหนดโมเดลของฉันเป็นคลาสเคสส่วนใหญ่เนื่องจากฉันสะดวกที่จะมีวิธีการคัดลอก ฉันมีสองรุ่นที่เกี่ยวข้องกันอย่างเคร่งครัด ฟิลด์เหมือนกันการดำเนินการหลายอย่างเหมือนกันและจะถูกเก็บไว้ในตาราง DB เดียวกัน แต่มีพฤติกรรมบางอย่างที่สมเหตุสมผลในหนึ่งในสองกรณีเท่านั้นหรือที่สมเหตุสมผลในทั้งสองกรณี แต่แตกต่างกัน จนถึงตอนนี้ฉันใช้คลาสเคสเดียวเท่านั้นโดยมีแฟล็กที่แยกแยะประเภทของโมเดลและเมธอดทั้งหมดที่แตกต่างกันตามประเภทของโมเดลเริ่มต้นด้วย if นี่เป็นเรื่องที่น่ารำคาญและไม่ค่อยปลอดภัย สิ่งที่ฉันต้องการจะทำคือแยกพฤติกรรมทั่วไปและฟิลด์ในคลาสเคสของบรรพบุรุษและให้โมเดลจริงทั้งสองสืบทอดมาจากโมเดลนั้น แต่เท่าที่ฉันเข้าใจการสืบทอดจากคลาสเคสนั้นขมวดอยู่ใน Scala และเป็นสิ่งต้องห้ามด้วยซ้ำหากคลาสย่อยนั้นเป็นคลาสเคส (ไม่ใช่เคสของฉัน) อะไรคือปัญหาและข้อผิดพลาดที่ฉันควรทราบในการสืบทอดจากคลาสเคส มันสมเหตุสมผลไหมในกรณีของฉันที่จะทำเช่นนั้น

12
การรวมไดนามิก Java และการแทนที่เมธอด
เมื่อวานนี้ฉันมีการสัมภาษณ์ทางเทคนิคทางโทรศัพท์สองชั่วโมง (ซึ่งฉันผ่านไปแล้วววว!) แต่ฉันก็ไม่เข้าใจคำถามต่อไปนี้เกี่ยวกับการผูกแบบไดนามิกใน Java และมันทำให้งงเป็นทวีคูณเพราะฉันเคยสอนแนวคิดนี้ให้กับนักศึกษาปริญญาตรีเมื่อฉันเป็น TA เมื่อไม่กี่ปีที่ผ่านมาดังนั้นโอกาสที่ฉันให้ข้อมูลที่ผิดจึงเป็นการรบกวนเล็กน้อย ... นี่คือปัญหาที่ฉันได้รับ: /* What is the output of the following program? */ public class Test { public boolean equals( Test other ) { System.out.println( "Inside of Test.equals" ); return false; } public static void main( String [] args ) { Object t1 = …

3
เมื่อใดควรใช้ val หรือ def ในลักษณะ Scala?
ฉันกำลังดูสไลด์สกาลาที่มีประสิทธิภาพและกล่าวถึงในสไลด์ 10 ที่จะไม่ใช้valใน a traitสำหรับสมาชิกนามธรรมและใช้defแทน สไลด์ไม่ได้กล่าวถึงรายละเอียดว่าเหตุใดจึงใช้บทคัดย่อvalใน a traitจึงเป็นการต่อต้านรูปแบบ ฉันจะขอบคุณถ้ามีใครสามารถอธิบายแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับการใช้ val vs def ในลักษณะสำหรับวิธีนามธรรมได้

10
ข้อผิดพลาด Java: Implicit super constructor ไม่ได้กำหนดไว้สำหรับตัวสร้างเริ่มต้น
ฉันมีโค้ด Java ง่ายๆที่มีลักษณะคล้ายกับสิ่งนี้ในโครงสร้าง: abstract public class BaseClass { String someString; public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); } public class ACSubClass extends BaseClass { public ASubClass(String someString) { super(someString); } public String getName() { return "name value for ASubClass"; } } ฉันจะมีคลาสย่อยไม่กี่คลาสBaseClassแต่ละคลาสใช้getName()วิธีการในแบบของตัวเอง ( รูปแบบวิธีเทมเพลต ) …

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