Когда вы вызываете A.Hello, все, что происходит, - это сообщение "hello", передаваемое объекту A.Затем объект A должен определить, как обрабатывать это сообщение.Сначала он рассмотрит свои собственные методы, чтобы определить, есть ли у него метод с именем "hello", прежде чем искать своих родителей и включенные модули для метода "hello".
Хотя вы могли бы технически использовать A.ancestors, чтобы увидеть, что B является предком A, и вызвать его метод hello, это нарушило бы абстракцию A как объекта.
Чтобы разрешить вызов обоих методов, можно создать другой метод в A, который вызывает B.hello, или назвать A.hello как-нибудь еще, чтобы он не перекрывал функциональность B.hello.
Редактировать: Поскольку вы включили B в A, создать метод, который вызывает привет B внутри A, так же просто, как добавить метод, который вызывает B.hello
def self.hello2
B.hello
end