Evgenii Legotckoi
27 июня 2016 г. 12:41

User Guide #14 - Ruby - переопределение методов

В подклассе, мы можем изменить поведение экземпляров класс переопределив методы суперкласса.

  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

Или, допустим, мы решили расширить метод identifity суперкласса вместо того, чтобы заменить его. Для этого мы можем использовать оператор 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 позволяет нам также передавать параметры в метод суперкласса. Это может быть полезно в том случае, если предварительно потребуется модифицировать или обработать полученные данные, а потом уже использовать обработку из метода суперкласса.

  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

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь