Evgenii Legotckoi
June 27, 2016, 12:41 p.m.

User Guide #14 - Ruby - Redefinition of methods

In a subclass, we can change the behavior of the instances by redefining superclass methods.

  1. ruby> class Human
  2. | def identify
  3. | print "I'm a person.\n"
  4. | end
  5. | def train_toll(age)
  6. | if age < 12
  7. | print "Reduced fare.\n";
  8. | else
  9. | print "Normal fare.\n";
  10. | end
  11. | end
  12. | end
  13. nil
  14. ruby> Human.new.identify
  15. I'm a person.
  16. nil
  17. ruby> class Student1<Human
  18. | def identify
  19. | print "I'm a student.\n"
  20. | end
  21. | end
  22. nil
  23. ruby> Student1.new.identify
  24. I'm a student.
  25. nil

Suppose we would rather enhance the superclass's identifity method than entirely replace it. For this we can use super .

  1. ruby> class Student2<Human
  2. | def identify
  3. | super
  4. | print "I'm a student too.\n"
  5. | end
  6. | end
  7. nil
  8. ruby> Student2.new.identify
  9. I'm a human.
  10. I'm a student too.
  11. nil

super lets us pass arguments to the original method. It is sometimes said that there are two kinds of people...

  1. ruby> class Dishonest<Human
  2. | def train_toll(age)
  3. | super(11) # we want a cheap fare.
  4. | end
  5. | end
  6. nil
  7. ruby> Dishonest.new.train_toll(25)
  8. Reduced fare.
  9. nil
  10.  
  11. ruby> class Honest<Human
  12. | def train_toll(age)
  13. | super(age) # pass the argument we were given
  14. | end
  15. | end
  16. nil
  17. ruby> Honest.new.train_toll(25)
  18. Normal fare.
  19. nil

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • IscanderChe
    April 12, 2025, 5:12 p.m.
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    April 1, 2025, 11:41 a.m.
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…