Ответ 1
Нет, это не так. B
может наследовать только один класс, но Mod
может быть добавлен ко многим классам. Если вы должны были вызвать super
внутри B#here
, он всегда будет ссылаться на A#here
, но внутри Mod#here
он будет ссылаться на метод экземпляра #here
любого класса Mod
, который был добавлен к:
module Mod
def here
super + ' Mod'
end
end
class A
prepend Mod
def here
'A'
end
end
class B
prepend Mod
def here
'B'
end
end
A.new.here
# => 'A Mod'
B.new.here
# => 'B Mod'
и
class A
def here
'A'
end
end
class B
def here
'B'
end
end
class C < A
def here
super + ' C'
end
end
C.new.here
# => 'A C'
class C < B
def here
super + ' C'
end
end
# TypeError: superclass mismatch for class C