Полиморфизм в Java: концепции, типы, характеристики и примеры

Опубликовано: 2022-04-18

Javascript — один из самых популярных и широко используемых языков объектно-ориентированного программирования, наряду с C#, PHP, Python, C++ и т. д. Он позволяет пользователям демонстрировать и решать реальные концепции посредством программирования, поскольку все представлено в виде объекта. Особенности Java как языка программирования предлагают несколько способов упростить разработку программного обеспечения, делая коды более динамичными и упрощая обслуживание.

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

Оглавление

Обзор объектно-ориентированного программирования

Языки объектно-ориентированного программирования (ООП) относятся к тем компьютерным языкам, которые используют концепцию «объектов» реального времени в кодировании. Он направлен на реализацию мирских сущностей, таких как наследование, полиморфизм, циклы, абстракция данных и т. Д., С помощью программирования.

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

1. Класс

«Класс» представляет собой набор свойств и методов, которые применяются ко всем указанным «объектам» в классе. Объекты могут быть разных типов, таких как целое число, массив или строка и т. д. Класс подобен прототипу, определяемому пользователем, с помощью которого можно создавать различные «объекты».

2. Объект

Объект — это самая фундаментальная единица языков ООП, представляющая реальные данные в реальной жизни. Объекты несут свойства класса(ов), в которых они вызываются.

3. Метод

Метод — это набор операторов, включающих различные функции, объединенные для выполнения определенной задачи. Он возвращает вывод после выполнения инструкций, определенных пользователем. Он также может выполнять задачи, не дающие результата. Методы позволяют программистам повторно использовать коды, не вводя их заново. Java требует, чтобы все методы принадлежали классу, в отличие от таких языков, как C++, C или Python.

Концепции ООП

Существует четыре основных принципа объектно-ориентированного программирования — Java обладает всеми этими свойствами:

1. Абстракция

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

2. Инкапсуляция

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

3. Наследование

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

4. Полиморфизм

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

Полиморфизм в Java

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

В Java полиморфизм проявляется в объявлении объектов как отдельных сущностей. Таким образом, одно и то же действие может быть выполнено несколькими способами. Полиморфизм активируется вместе с наследованием, позволяя объектам выполнять разные задачи, используя унаследованные свойства разных классов. Различия в обозначении методов или объектов различают две сущности.

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Характеристики полиморфизма

1. Принуждение

Неявное преобразование типов данных для предотвращения ошибок типов во время компиляции является принуждением. Он не включает явные преобразования типов данных, а следует только той иерархии преобразования, которую допускает Java. Например, если операнд является плавающим, а оператор является целым числом, результат будет плавающим.

2. Полиморфные параметры/переменные

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

3. Внутренняя перегрузка оператора

Перегрузка оператора использует символ оператора в соответствии с требованиями пользователя. Java поддерживает внутреннюю перегрузку операторов. Это также пример статического полиморфизма.

Типы полиморфизма в Java

В Java полиморфизм можно вызвать с помощью:

1. Перегрузка метода

Перегрузка методов — это процесс создания нескольких объектов или методов с одинаковыми именами и принадлежащих к одному классу. Он работает внутри класса.

2. Переопределение метода

Переопределение метода — это то, как подкласс создает те же методы, что и объявленные в суперклассе. Он работает через классы. Если подкласс содержит те же методы, которые уже присутствуют в суперклассе, то функция в подклассе переопределяется.

Полиморфизм подтипов в Java

Полиморфизм подтипа зависит от Upcasting и Late Binding.

  • Повышение приведения — это процесс, с помощью которого объект или метод может повысить тип данных (с плавающей запятой, целое число и т. д.) из подтипа в супертип, переместив его вверх по иерархии наследования.
  • Позднее связывание используется для вызова методов, которые не являются конечными экземплярами.

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

Полиморфизм времени выполнения в Java

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

Вот пример полиморфизма во время выполнения в Java:

класс автомобилей{

void run(){System.out.println("вождение");}

}

класс Volkswagen расширяет автомобиль{

void run(){System.out.println("Безопасное вождение на 90 км");}

public static void main (String args []) {

Автомобиль c = новый Volkswagen();//обновление

б.выполнить();

}

}

Выход :

Безопасное вождение с 90 км

Полиморфизм времени компиляции в Java

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

Вот пример полиморфизма времени компиляции в Java:

класс SimpleCalc

{

int добавить (int x, int y)

{

вернуть х+у;

}

int add (int x, int y, int z)

{

вернуть х+у+г;

}

}

демонстрация публичного класса

{

public static void main (String args [])

{

SimpleCalc obj = новый SimpleCalc();

System.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

Выход :

50

90

Важность полиморфизма

Полиморфизм позволяет писать методы, которые могут представлять различные типы сущностей с одним и тем же именем. Полиморфизм важен в Java из-за его различных преимуществ использования и возможностей, которые он предоставляет для создания динамического кода:

  1. Это позволяет повторно использовать коды — одни и те же коды не нужно писать несколько раз.
  2. Это позволяет одной переменной демонстрировать несколько вариантов поведения — наличие одного и того же имени, но разных свойств может открыть возможности для поддержания согласованности в кодах.
  3. Сокращение объемных кодов — это помогает при отладке, а также сокращает время компиляции, экономя память, энергию и время пользователя.

Возможные проблемы при реализации полиморфизма

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

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

Выводы

Хрупкая природа наследования может привести к нефункциональным и неработающим кодам, несмотря на то, что все другие критерии остаются выполненными. Эта основная архитектурная проблема рассматривается как проблема хрупкого базового класса. Узнайте больше о том, как Java демонстрирует концепции ООП, присоединившись к программе upGrad Executive PG в области разработки программного обеспечения — специализация в разработке полного стека . Получите наставничество от отраслевых экспертов и приобретите практические знания, участвуя в практических совместных проектах с коллегами.

Забронируйте место сегодня!

Что такое статическая и динамическая привязка?

Объекты, которые определяются во время компиляции, называются статической привязкой. С другой стороны, типы динамической привязки объектов определяются во время выполнения. Первый используется при перегрузке метода, а второй — при переопределении метода.

Каковы два фундаментальных различия между переопределением метода и перегрузкой метода?

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

Каковы различия между полиморфизмом и наследованием в Java?

В Java есть несколько различий между полиморфизмом и наследованием:

1. Наследование — это представление реальных отношений родитель-потомок в программировании. Но полиморфизм — это катализатор, который использует это отношение, чтобы сделать программу более динамичной.
2. Наследование позволяет повторно использовать коды дочернего класса, наследуя их от родительского класса. Полиморфизм, напротив, позволяет дочернему классу снова переопределить свое существующее поведение внутри родительского класса.