Это часть серии сообщений о некоторых столпах объектно-ориентированного программирования. полиморфизм (от греческого «πολύς, polys, много, много и μορφή, morphē, форма, форма) является предоставление единого интерфейса сущностям разных типов (Википедия). По сути, нам нужно что-то, что даст нам правильное поведение при различных типах ввода. Например, оператор + является полиморфным, поскольку он может правильно обрабатывать различные входные данные:

1 + 1 => 2
"Hello" + " " + "World" => "Hello World"

При задании двух целых чисел оператор + добавит, при задании двух строк он будет конкатенирован. Я не буду вдаваться в приведение типов в JavaScript, но есть разные варианты поведения, если вы передаете оператору + строку и целое число.

Этот пример встроен во многие языки, но как насчет использования полиморфизма в наших собственных классах? Полиморфизм в отношении ООП — это способность дочернего класса либо полностью перезаписывать, либо добавлять пользовательские функции к методу, унаследованному от родительского класса. Вот пример:

class Person
  def have_fun
    puts "I'm eating some nice crunchy chips"
  end
end
class Child < Person
  def have_fun
    super #super means call this method as it was inherited
    print " at Chuck E Cheese"
  end
end

Child наследуется от Person, но добавляет собственные функции в метод have_fun. Использование ключевого слова super указывает классу Child вызвать унаследованный метод have_fun, ЗАТЕМ выполнить код в своей пользовательской версии этого метода. Это позволяет нам избежать повторения кода, если мы хотим добавить некоторые функции поверх того, что унаследовал подкласс. Если мы вызовем have_fun для экземпляра дочернего элемента, ввод будет

I'm eating some nice crunchy chips at Chuck E Cheese

Полиморфизм — это просто способность класса переопределять методы, унаследованные от его родительского класса, либо полностью перезаписывая метод, либо добавляя пользовательские функции. Повторим еще раз: если метод have_fun, определенный в классе Child, не использует ключевое слово super, он полностью перезапишет унаследованный метод have_fun и просто выведет

at Chuck E Cheese