Объектно-ориентированное программирование на Java. Платформа Java SE. Тимур Машнин
Чтение книги онлайн.

Читать онлайн книгу Объектно-ориентированное программирование на Java. Платформа Java SE - Тимур Машнин страница 33

СКАЧАТЬ наследование, мы ввели семейства связанных классов.

      Класс может наследовать поля и методы из базового класса и добавить дополнительные свои поля и методы.

      Теперь мы хотим настроить возможности в классах такой иерархии.

      Представьте, что мы хотим иметь одни и те же методы в базовом классе и в производном классе, но мы хотим сделать что-то другое в зависимости от класса, к которому принадлежит объект.

      Здесь мы видим, что в методе toString подкласса car определено другое поведение, отличное от того, которое определено в суперклассе.

      Поэтому поведение считается переопределенным.

      Этот же метод может делать что-то совершенно отличное от метода суперкласса, с тем же именем и теми же функциональными возможностями.

      Таким образом, мы видим, что метод с тем же именем и одинаковой функциональностью может иметь разный код в разных классах иерархии.

      Это называется переопределением.

      Однако при необходимости можно вызвать метод суперкласса.

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

      Здесь также может использоваться ключевое слово this, чтобы обратиться к методу, который определен в соответствующем классе.

      Это переопределение методов называется полиморфизмом.

      Слово полиморфизм происходит от греческого, что означает многие формы.

      И в контексте объектно-ориентированного программирования, полиморфизм позволяет нам иметь методы с одним и тем же именем, и одинаковой функциональностью, но разным поведением в группе классов, связанных отношением наследования.

      Другими словами, полиморфизм позволяет использовать наследников, как родителей. При этом, если в классе-наследнике был переопределен какой-то метод, то вызовется он.

      Переопределение и перегрузка

      Теперь давайте рассмотрим две концепции, которые выглядят взаимосвязанными, но на самом деле являются разными, это перегрузка и переопределение.

      Обе эти концепции применяются к методам.

      Ранее мы говорили о конструкторах.

      Помните, что у нас был автомобиль с двумя полями, lights и color.

      И мы определили в одном классе не один, а несколько конструкторов.

      Имена этих конструкторов были одинаковыми, но параметры были разные.

      И это важно, чтобы список параметров был другим.

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

      Фактически, Java понимает, какой конструктор вызвать, просматривая параметры.

      И то, что мы делали для конструкторов, также применимо для методов.

      Мы говорим о перегрузке, когда у нас есть разные методы с тем же именем, но разным СКАЧАТЬ