/ / Успадкування і екземпляри Ruby - ruby

Рубін спадщини та інстанції - рубій

Я зробив клас User (що є прикладом Class), і зробили його успадкуванням від класу Person. Що робить це вважається не багаторазовим успадкуванням? Це не успадковує методи, подібні до new від Class і будь-які методи, які Person пропозиції?

Іншими словами, як це не множинне успадкування:

class User < class Person
some methods here...
end

коли User вже успадковує всі Class"Методи? Чи не наступне, що відбувається під капотом?

class User < class Person and class Class
end

Відповіді:

2 для відповіді № 1

Якщо ви відкриваєте irb, ви можете перевірити це самостійно. Тип User.superclass, ви побачите це User має тільки один суперклас, який є Person. User буде успадковувати методи від Object оскільки Personсуперкласу Object


1 для відповіді № 2

Це не "множинне успадкування" звичайним способом, а простий ланцюжок успадкування.

Предки не можуть мати власні конструктори, якщо ви не викликаєте їх явно initializeі в складних ієрархіях це може бути дуже болючим. Головне, що існує лише один об'єкт об'єкта, який поділяється, і в нього змішуються методи.

У ієрархії ruby ​​класу завжди є дерево. Навіть міксини, які можуть виглядати як багаторазове успадкування - внутрішньо реалізуються як ланцюжок спадкоємства.

Істинне множинне успадкування може бути важким, наприклад, у C ++:

class A {}
class B: public A{}
class C: public A{}
class D: public B, public C{}

Скільки екземплярів A повинна бути всередині D? ("алмазна проблема")

Ruby уникає цього просто, не маючи причини.