Статьи

ООП в Java: полиморфизм и интерфейсы

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

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


Вам также может понравиться:
Системный подход к написанию лучшего кода с концепциями ООП

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

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

В этой статье я собираюсь обсудить две основные особенности Java — полиморфизм и интерфейсы.

Полиморфизм

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

В интервью я обычно спрашиваю: «что такое полиморфизм?»

И удивительно, что в большинстве случаев, ответ получил: « р olymorphism означает множество форм

В ответ на следующий вопрос , как правило: « W шляпа вы имеете в виду под» много форм?»

Затем, где вещи становятся интересными. С этого момента я обнаружил, что понятие «много форм» варьируется от кандидата к кандидату

Наиболее распространенный ответ, который я получил, был: « Существует два типа полиморфизма — полиморфизм во время выполнения и статический полиморфизм. Переопределение метода является примером полиморфизма во время выполнения, а перегрузка метода — примером статического полиморфизма».

Очевидно, они знают, почему переопределение метода называется «полиморфизмом времени выполнения» и почему «перегрузка метода» называется «статическим полиморфизмом». Но из этих ответов трудно прийти к выводу о том, что они имели в виду под «многими формами». И хотя перегрузка метода и переопределение метода — полиморфизм, почему  они — полиморфизм?

Следующим наиболее распространенным ответом на этот вопрос было: « Позвольте мне объяснить на примере …» И пример, используемый для объяснения этого, опять же, тот же пример перегрузки метода и переопределения метода, который описан ранее.

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

Ниже приведен пример: 

                    

На приведенной выше диаграмме Shape является интерфейсом (также может быть классом) с одним абстрактным методом   draw(). Треугольник, прямоугольник и круг — три реализации этого интерфейса. Каждая конкретная реализация имеет свой собственный процесс рисования.


Джава