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

Автор: Тимур Машнин
Издательство: Издательские решения
Серия:
Жанр произведения: Компьютеры: прочее
Год издания: 0
isbn: 9785005039606
Скачать книгу
подклассами класса Vehicle.

      Теперь мы можем определить класс car, расширив класс Vehicle, и добавить дополнительные поля и методы, которые может иметь легковой автомобиль.

      А для грузовых автомобилей мы делаем то же самое: расширяем класс Vehicle такими полями и методами, которые необходимы.

      Все остальные поля и методы унаследованы от класса Vehicle.

      Обратите внимание, что мы не раскрыли тело конструктора.

      Это требует дальнейшего объяснения и новых концепций.

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

      У одного класса не может быть двух суперклассов, не может быть двух родителей.

      Таким образом, мы знаем, что один класс может расширить другой класс.

      Например, если класс B расширяет класс A, это означает, что он наследует его поля и методы.

      И это можно сделать многократно.

      То есть класс B может быть расширен, например, классом C.

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

      В нашем определении класса vehicle и класса car, где класс car расширяет класс vehicle, мы определяем конструктор для класса vehicle, который инициализирует приватное поле color.

      И с этим не никаких проблем.

      Но как мы можем определить тело конструктора car, с учетом двух аргументов, целого числа для количества пассажиров и строки для цвета?

      Класс car наследует все методы от класса vehicle – перемещение вперед и назад, и все его поля, в данном случае, только color.

      Но поле color является приватным полем и не может быть доступно извне класса vehicle.

      Это относится также и к подклассам, и это очень важно.

      Поэтому неправильно присваивать значение «с» полю color в классе car.

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

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

      Теперь, если мы хотим вызвать конструктор суперкласса, мы используем ключевое слово super.

      Здесь вы это видите.

      super (c) – вызов конструктора vehicle (c).

      Таким образом, мы сможем инициализировать поле color из подкласса.

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

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

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

      Здесь мы видим другой пример.

      У нас есть класс A с подклассом B, а класс B с подклассом C.

      Диаграмма справа от вас показывает отношения наследования.

      Класс A имеет конструктор без аргументов, который печатает строку A, пробел.

      В классе B мы видим, что есть также конструктор без аргументов,