Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB

User Guide #13 - Ruby - наследование

Inheritance, Ruby, ruby lesson, ruby уроки, user guide, наследование, руководство пользователя

Наша классификация объектов в каждом дне жизни является на самом деле иерархической. Мы знаем, что все кошки млекопитающие, а все млекопитающие являются животными. Наименьшие классы наследуют характеристики из больших классов, к которым они принадлежат. Если все млекопитающие дышат, то все кошки также дышат.

Мы можем выразить эту концепцию в Ruby:

ruby> class Mammal
    |   def breathe
    |     print "inhale and exhale\n"
    |   end
    | end
   nil
ruby> class Cat<Mammal
    |   def speak
    |     print "Meow\n"
    |   end
    | end
   nil

Хотя мы не указываем, как Cat должен дышать, каждая кошка будет наследовать это поведение от класса Mammal, с тех самых пор, как Cat был определён подклассом Mammal. (В объектно-оринтированной терминологии меньший класс является подклассом большего класса, являющегося суперклассом) С точки зрения программиста, кошки получают способность дышать бесплатно, а после того, как мы добавим метод speak, то наши кошки смогут дышать и говорить одновременно.

ruby> tama = Cat.new
   #<Cat:0xbd80e8>
ruby> tama.breathe
inhale and exhale
   nil
ruby> tama.speak
Meow
   nil

Могут быть ситуации, где некоторые свойства суперклассов не должны наследоваться определённым подклассом. Хотя птицы, как правило, знают как летать, но пингвины являются нелетающим подклассом птиц

ruby> class Bird
    |   def preen
    |     print "I am cleaning my feathers."
    |   end
    |   def fly
    |     print "I am flying."
    |   end
    | end
   nil
ruby> class Penguin<Bird
    |   def fly
    |     fail "Sorry. I'd rather swim."
    |   end
    | end
   nil

Вместо того, чтобы определять все свойства каждого нового класса, мы должны только добавить или переопределить различия между подклассом и суперклассом. Такое использование наследования иногда называют дифференциальным программированием. Это одно из преимущество объектно-ориентированного программирования.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
МК
13 января 2019 г. 20:35
Мария Канева

C++ - Тест 005. Структуры и Классы

  • Результат:91баллов,
  • Очки рейтинга8
МК
13 января 2019 г. 20:32
Мария Канева

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:70баллов,
  • Очки рейтинга1
МК
13 января 2019 г. 20:28
Мария Канева

C++ - Тест 003. Условия и циклы

  • Результат:78баллов,
  • Очки рейтинга2
Последние комментарии
I
16 января 2019 г. 8:06
IscanderChe

Заработало. Забыл model->select(); вписать.
I
16 января 2019 г. 8:02
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
16 января 2019 г. 7:51
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
16 января 2019 г. 7:43
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Сейчас обсуждают на форуме
16 января 2019 г. 16:43
Михаиллл

Здравствуйте.Сделал Sleep в приложении так: QApplication::processEvents(); QThread::sleep(TimeSleep); На компьютере работает прекрасно.Но на андройде работает не прав...
15 января 2019 г. 16:53
Михаиллл

Спасибо, заработало.Но выдало обычный текст без форатирования HTML.Придется искать дальше
15 января 2019 г. 12:52
BlinCT

Я же вам выше написал CLion умеет работать с ремоут машинами. И Qt так же собирает.
ПБ
14 января 2019 г. 14:27
Павел Богдевич

Да
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы