Наследование - это отношение между двумя классами. Наследование создает дочерние отношения между классами. Это механизм для повторного использования кода и позволяет независимым расширениям исходного программного обеспечения через общедоступные классы и интерфейсы . Преимущество наследования заключается в том, что классы ниже, чем иерархия, получают функции выше, , но также могут добавлять конкретные свои собственные.
В Ruby класс может наследовать только один класс. (то есть класс может наследовать от класса, который наследуется от другого класса, который наследуется от другого класса, но один класс не может наследовать сразу со многих классов). Класс BasicObject является родительским классом всех классов в Ruby. Поэтому его методы доступны для всех объектов, если они явно не переопределены.
Ruby преодолевает однократное наследование сразу же, используя mixin.
Я попытаюсь объяснить на примере.
module Mux
def sam
p "I am an module"
end
end
class A
include Mux
end
class B < A
end
class C < B
end
class D < A
end
можно проследить с помощью class_name.superclass.name и сделать этот процесс, если вы не нашли BasicOject в этой иерархии. BasicObject - класс супер класса для каждого класса. позволяет видеть, что мы хотим видеть дерево иерархии классов C.
C.superclass
=> B
B.superclass
=> A
A.superclass
=> Object
Object.superclass
=> BasicObject
Вы можете видеть всю иерархию класса С точки отметить, используя этот подход, вы не найдете модули, которые включены или предваряется в родительских классах.
Существует еще один подход для поиска полной иерархии, включая модули. Согласно Ruby doc ancestors. Возвращает список модулей, включенных/добавленных в mod (включая сам модем).
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
Здесь Mux и Kernel являются модулями.
http://rubylearning.com/satishtalim/ruby_inheritance.html https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
когда застрял, как это всегда попробовать 'B.methods.sort' в IRB. Возможно, что-то даст вам ключ к названию метода, который вы ищете. –
@IvayloStrandjev Это не поможет. Слишком много методов для просмотра. Это пустая трата времени. – sawa
@sawa не соответствует действительности. Мне потребовалось 30 секунд. Достаточно для других пользователей быть быстрее меня, но довольно быстро. –