Я зробив клас 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 уникає цього просто, не маючи причини.