Скачать книгу

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      У них разные поля и методы.

      Преобразование применимо не только для классов.

      Это также возможно с примитивными типами и между примитивными типами.

      Мы видели несколько примеров со строками и целыми числами.

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

      При кастинге вверх мы не теряем информацию о числовом значении.

      Поэтому мы можем делать это преобразование неявно.

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

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

      Полиморфизм

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

      Объекты в одном классе имеют одинаковые поля, и одни и те же методы.

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

      Когда мы ввели наследование, мы ввели семейства связанных классов.

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

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

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

Скачать книгу