Ruby继承与实例
我创建了一个类Ruby继承与实例,ruby,Ruby,我创建了一个类User(它是class的一个实例),并使其从classPerson继承。是什么使这被认为不是多重继承?它不是从Class继承了new等实例方法,以及Person提供的任何方法吗 换句话说,这怎么不是多重继承呢 class User < class Person some methods here... end 如果你打开irb,你可以自己检查。键入User.superclass,您将看到User只有一个超类,即PersonUser将从Object继承方法,因为Pers
User
(它是class
的一个实例),并使其从classPerson
继承。是什么使这被认为不是多重继承?它不是从Class
继承了new
等实例方法,以及Person
提供的任何方法吗
换句话说,这怎么不是多重继承呢
class User < class Person
some methods here...
end
如果你打开irb,你可以自己检查。键入
User.superclass
,您将看到User
只有一个超类,即Person
User
将从Object
继承方法,因为Person
的超类是Object
它不是通常的“多重继承”,而是一个简单的继承链
祖先不能有自己的构造函数,除非您从initialize
显式调用它们,在复杂的层次结构中,这可能非常痛苦。
主要的一点是,只有一个实例对象,它是共享的,并且混合了方法
在ruby中,类的层次结构总是一棵树。即使是看起来像多重继承的mixin,在内部也是作为继承链实现的
真正的多重继承可能很困难,例如,在C++中:
class A {}
class B: public A{}
class C: public A{}
class D: public B, public C{}
A
的多少个实例应该在D
中?(钻石问题)
Ruby只是通过不知道原因来避免它。可能重复Hey我编辑了我的评论,以便更具体。这篇文章更多地是关于指定两个父类,而我的问题是,当ruby中的任何类的父类看起来像class“class”时,如何将另一个类列为父类……您的代码不是有效的ruby语法<代码>用户不是
类
的子类,它是类
类“多重继承”的一个实例,因为一种语言的一个特性是向该语言的用户公开的。对于Ruby用户来说,作为多重继承,这实际上并不有用;您不能从两个任意类继承。new
不是一个实例方法。谢谢您,这真的让事情变得明朗了!让我困惑的是,我没有意识到所有的东西都能很好地整合在一个大的指挥链中!即使User和Person是类“class”的实例,但如果执行class.superclass,则会得到模块,如果执行该类的超类,则会返回到对象!一切都是圆的!!!谢谢
class A {}
class B: public A{}
class C: public A{}
class D: public B, public C{}