Поддерживает ли Ruby множественное наследование?
Этот вопрос проверяет понимание того, как Ruby реализует гибкость и повторное использование кода без множественного наследования.
Короткий ответ
Ruby не поддерживает множественное наследование классов, но предоставляет модули (modules), которые можно подключать с помощью include и extend для достижения подобного эффекта.
Длинный ответ
Множественное наследование — это возможность одного класса наследовать поведение от нескольких классов. Ruby специально избегает этой концепции, так как она может привести к сложности и конфликтам, например, из-за неоднозначности при вызове методов.
Вместо этого Ruby предлагает модули. Они обеспечивают функциональность, которую можно добавлять к классам:
- include — добавляет методы модуля как методы экземпляра.
- extend — добавляет методы модуля как методы самого класса.
Пример:
module A
def greet
"Hello from A"
end
end
module B
def greet
"Hello from B"
end
end
class MyClass
include A
include B
end
obj = MyClass.new
puts obj.greet # => "Hello from B" (последний подключённый модуль имеет приоритет)
Ruby поддерживает повторное использование кода через модули, избегая проблем множественного наследования.