Java полиморфизм наследование инкапсуляция полиморфизм наследование

Java полиморфизм наследование инкапсуляция полиморфизм наследование

ребята, помогайте не очень умному как мы смогли отправить в барбершоп объекты типа cat и dog, если shear принимает в качестве параметра объекты типа animal? Почему это возможно? код из статьи: public class AnimalBarbershop < public void shear(Animal animal) < System.out.println("Стрижка готова!"); >> public static void main(String[] args) < Cat cat = new Cat(); Dog dog = new Dog(); AnimalBarbershop barbershop = new AnimalBarbershop(); barbershop.shear(cat); barbershop.shear(dog); >

полиморфизм тут описан как то странно. и вообще как правило это самая плохообъясненная часть ООП, у него нет четкого определения и везде его объясняют по разному. как я понимаю ПОЛИМОРФИЗМ — это возможность для разных классов, имеющих общее свойство, реализовать это свойство по своему. ну допустим птица и самолет, оба умеют летать, поэтому у обоих должен быть какой то метод описывающий эту способность. fly к примеру. поэтому у обеих будет интерфейс который декларирует это свойство. но летают они по разному, поэтому в каждом случае и реализация будет разной. Это и есть полиморфизм — есть классы с общим свойством, оно абстрактное, но у разных классов (конкретных объектов) есть конкретная реализация этого свойства, и она будет разной, в зависимости от объекта

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

Источник

Java полиморфизм наследование инкапсуляция полиморфизм наследование

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

  • Абстракция. Абстракция означает использование простых вещей для описания чего-то сложного. Например, мы все знаем как пользоваться телевизором, но в тоже время нам не нужно обладать знаниями о том, как он работает чтобы смотреть его. В Java под абстракцией подразумеваются такие вещи, как объекты, классы и переменные, которые в свою очередь лежат в основе более сложного кода. Использование данного принципа позволяет избежать сложности при разработке ПО.
  • Инкапсуляция. Под инкапсуляцией подразумевается сокрытие полей внутри объекта с целью защиты данных от внешнего, бесконтрольного изменения со стороны других объектов. Доступ к данным (полям) предоставляется посредством публичных методов (геттеров/сеттеров). Это защитный барьер позволяет хранить информацию в безопасности внутри объекта.
  • Наследование. Это особая функциональность в объектно-ориентированных языках программирования, которая позволяет описывать новые классы на основе уже существующих. При этом поля и методы класса-предка становятся доступны и классам-наследникам. Данная фича делает классы более чистыми и понятным за счет устранения дублирования программного кода.
Читайте также:  Php получить следующую дату

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

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

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

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

В данном примере кофемашина представляет собой абстракцию, которая от нас скрывает все подробности варки кофе. Нам лишь остается просто взаимодействовать с простым интерфейсом, который не требует от нас каких-либо знаний о внутренней реализации машины.

Этот же подход можно использовать и в объектно-ориентированных языках программирования, таких как Java.

Инкапсуляция позволяет нам пользоваться возможностями класса без создания угрозы безопасности данных за счет ограничения прямого доступа к его полям. Также она позволяет изменять код классов не создавая проблем их пользователям (другим классам). В Java данный принцип достигается за счет использования ключевого слова private .

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

Читайте также:  Parse char array to string java

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

Рассмотрим примеры полиморфизма в Java: переопределение и перегрузка методов.

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

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

Источник

Оцените статью