Questions tagged «multiple-inheritance»

一些面向对象的计算机编程语言的功能,其中一个类可以从多个超类或基类继承行为和功能。

16
什么是mixin,为什么它们有用?
在“ Python编程 ”中,Mark Lutz提到了“ mixins”。我来自C / C ++ / C#背景,以前没有听说过这个词。什么是mixin? 在本示例的两行之间进行阅读(我已经链接到它,因为它很长),我认为这是使用多重继承来扩展类而不是“适当的”子类的一种情况。这是正确的吗? 为什么我要这样做而不是将新功能放入子类中?因此,为什么混合/多重继承方法比使用组合更好? 什么将mixin与多重继承分开?这仅仅是语义问题吗?

15
Python的super()如何与多重继承一起使用?
我在Python面向对象编程中非常陌生,并且在理解super()函数(新样式类)时遇到困难,尤其是在涉及多重继承时。 例如,如果您有类似的东西: class First(object): def __init__(self): print "first" class Second(object): def __init__(self): print "second" class Third(First, Second): def __init__(self): super(Third, self).__init__() print "that's it" 我不明白的是:Third()该类会继承这两个构造方法吗?如果是,那么哪个将与super()一起运行,为什么? 如果要运行另一台呢?我知道这与Python方法解析顺序(MRO)有关。

16
C#中的多重继承
由于多重继承很糟糕(这会使源代码更加复杂),因此C#不会直接提供这种模式。但是有时具有此功能会有所帮助。 例如,我能够使用接口和三个类似的类来实现缺少的多继承模式: public interface IFirst { void FirstMethod(); } public interface ISecond { void SecondMethod(); } public class First:IFirst { public void FirstMethod() { Console.WriteLine("First"); } } public class Second:ISecond { public void SecondMethod() { Console.WriteLine("Second"); } } public class FirstAndSecond: IFirst, ISecond { First first = new First(); Second …

6
用多重继承调用父类__init__,正确的方法是什么?
假设我有多个继承方案: class A(object): # code for A here class B(object): # code for B here class C(A, B): def __init__(self): # What's the right code to write here to ensure # A.__init__ and B.__init__ get called? 有编写的两个典型方法C的__init__: (老式) ParentClass.__init__(self) (较新的样式) super(DerivedClass, self).__init__() 但是,在任何一种情况下,如果父类(A和B)没有遵循相同的约定,则代码将无法正常工作(某些代码可能会丢失或多次调用)。 那么又是什么正确的方法呢?说“保持一致,遵循一个或另一个”很容易,但是如果A或B来自第三方图书馆,那又如何呢?有没有一种方法可以确保所有父类构造函数都被调用(以正确的顺序,并且只能调用一次)? 编辑:看看我的意思,如果我这样做: class A(object): def __init__(self): print("Entering …

16
Java多重继承
为了完全理解如何解决Java的多重继承问题,我有一个经典的问题需要澄清。 可以说我有类Animal此有子类Bird和Horse我需要做一个类Pegasus,从扩展Bird和Horse自Pegasus既是一只鸟和一匹马。 我认为这是经典的钻石问题。从我能理解经典的方式来解决,这是使Animal,Bird和Horse类接口,并实现Pegasus从他们。 我想知道是否还有另一种方法可以解决仍然可以为鸟和马创建对象的问题。如果有一种能够创造动物的方法,那也很棒,但不是必须的。


9
如何制作一个实现两种通用类型的接口的Java类?
我有一个通用的界面 public interface Consumer<E> { public void consume(E e); } 我有一个使用两种类型的对象的类,所以我想做些类似的事情: public class TwoTypesConsumer implements Consumer<Tomato>, Consumer<Apple> { public void consume(Tomato t) { ..... } public void consume(Apple a) { ...... } } 显然我做不到。 我当然可以自己执行调度,例如 public class TwoTypesConsumer implements Consumer<Object> { public void consume(Object o) { if (o instanceof Tomato) …


17
JavaScript中的多个继承/原型
我已经到了需要在JavaScript中进行一些基本的多重继承的地步。(我不是在这里讨论这是否是一个好主意,所以请您保留那些评论。) 我只想知道是否有人尝试过成功(或没有成功),以及他们是如何做到的。 归根结底,我真正需要的是能够拥有一个对象,该对象能够从多个原型链中继承属性(即,每个原型可以具有自己的适当链),但是要具有给定的优先顺序(它将搜索链以获取第一个定义)。 为了说明从理论上讲这是怎么可能的,可以通过将辅助链附加到主链的末端来实现,但这会影响那些以前的原型的所有实例,这不是我想要的。 有什么想法吗?




5
虚拟继承如何解决“钻石”(多重继承)的歧义?
class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a = new D(); a->eat(); } 我了解钻石的问题,并且上面的代码没有这个问题。 …


7
Java-接口实现中的方法名称冲突
如果我有两个接口,它们的用途完全不同,但是具有相同的方法签名,那么我如何使一个类同时实现两个接口,而又不被迫编写一个同时为两个接口服务的方法并在该方法中编写一些复杂的逻辑检查调用的对象类型并调用适当代码的实现? 在C#中,这可以通过所谓的显式接口实现来克服。Java中有什么等效方法吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.