Главная » Разработка для Android » Объекты, наследование и полиморфизм – JAVA ДЛЯ ANDROID

0

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

При объявлении подтипов Java используется ключевое слово extends. Вот пример наследования в Java:

Ragtop – это подтип Саг. Выше мы отмечали, что Саг, в свою очередь, является подклассом Object. Ragtop изменяет определение метода drive из класса Саг. В данном случае принято говорить, что он переопределяет (override) drive. И Car, и Ragtop оба имеют тип Саг (но они оба не имеют тип Ragtop!), и поведения метода drive, закрепленные за ним в каждом из этих классов, различаются.

Продемонстрируем полиморфное поведение:

Этот фрагмент кода будет компилироваться без ошибок (несмотря на присвоение Ragtop переменной, имеющей тип Саr). Кроме того, он выполнится без ошибок и даст следующий вывод:

В различные моменты жизненного цикла переменная auto содержит ссылки на два различных объекта типа Саr. Один из этих объектов относится не только к типу Саr, но также к подтипу Ragtop. Точное поведение утверждения auto. drive () зависит от того, на какой из объектов – первый или второй переменная содержит ссылку в данный момент. Это пример полиморфного поведения.

Как и многие другие объектно-ориентированные языки, Java поддерживает приведение типов (type casting), что обеспечивает преобразование объявленного типа переменной в любой из типов, в сочетании с которыми переменная проявляет полиморфизм:

Приведение бывает необходимым, но если оно используется чрезмерно активно, это свидетельствует о том, что код несовершенен. Очевидно, что по правилам полиморфизма все переменные могут быть объявлены как переменные типа Object, а затем при необходимости с ними можно выполнять приведение. Но, поступая так, мы отказываемся от применения важнейшего механизма статической типизации.

В Java аргументы метода (то есть его актуальные параметры) должны быть полиморфны формальным аргументам. Аналогично методы возвращают значения, которые являются полиморфными объявленному типу возвращаемого значения. Продолжая наш автомобильный пример, рассмотрим следующий фрагмент кода, который будет компилироваться и возвращаться без ошибок:

Метод park объявляется как способный принимать в качестве единственного параметра объект типа Саг. Однако в методе LetsGo он вызывается с объектом типа

Ragtop, который является подтипом типа Саг. Аналогично переменной myCar присваивается значение типа Ragtop, и это значение возвращает метод whats InTheGarage. Объект является Ragtop: если вы вызываете его метод drive, он сообщит вам и о top, и о radio. С другой стороны, поскольку он также является Саг, он может использоваться везде, где использовался бы Саг. Такая возможность замены подтипов является принципиальным примером мощности полиморфизма, а также его взаимодействия с безопасностью типов. Даже на этапе компиляции ясно, по назначению используется объект или нет. Безопасность типов позволяет компилятору находить ошибки на раннем этапе, в то время как их было бы гораздо сложнее искать, если бы они возникали во время исполнения.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии