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

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

СКАЧАТЬ правильно вызывает сначала конструктор суперкласса A, затем печатает строку B, пробел.

      В классе C конструктор без аргументов сначала вызывает конструктор его суперкласса B, а затем печатает строку C точка.

      Теперь, что происходит, когда мы создаем новый объект класса C?

      Конструктор C вызывает конструктор B, который в свою очередь, вызывает конструктор А.

      Таким образом, печатается: A, пробел, B, пробел, C точка.

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

      Приведение типов

      Давайте посмотрим снова на эту иерархию классов.

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

      Вопрос в том, если ли у нас есть объект класса car, мы можем использовать его там, где должны быть объекты класса vehicle?

      Например, в переменной vehicle?

      И наоборот, можем ли мы поместить объекты суперкласса там, где должны быть объекты подкласса?

      И если да, то при каких обстоятельствах?

      Мы говорим о кастинге или приведении при преобразовании объекта из одного класса к другому связанному классу.

      Представьте себе, что у нас есть переменная vehicle, которая хранит объект vehicle, и переменная car, с сохраненным в нем объектом car.

      Можем ли мы присвоить объект car переменной vehicle и наоборот?

      Мы говорим о приведение к базовому типу при преобразовании объекта из класса в суперкласс.

      И переход от подкласса к суперклассу всегда возможен.

      Объекты подкласса наследуют все от суперкласса.

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

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

      Но вы также можете не делать это, как вы видите в последней строке.

      Мы говорим о понижающем приведении при конвертации объекта от класса к его подклассу.

      Теперь мы хотим заставить vehicle стать car.

      Мы переходим от общего класса к более конкретному классу, и это должно быть сделано явно.

      В этом примере мы объявляем переменную типа vehicle, но храним в ней car.

      Таким образом, мы можем явно понизить эту переменную для хранения car, который находится в переменной v.

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

      Мы объявляем переменную v, и мы храним в ней car.

      Мы можем это сделать, поскольку car является vehicle.

      Однако вы не можете привести v в переменную truck.

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

      Вы не можете превратить car в truck или truck в car.

      У них СКАЧАТЬ