Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby继承与实例_Ruby - Fatal编程技术网

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
的一个实例),并使其从class
Person
继承。是什么使这被认为不是多重继承?它不是从
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{}