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

Полиморфизм обеспечивает гибкость в Java.

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

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

В Java есть два типа полиморфизма.

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

Здесь компилятор может увидеть наш код как полиморфный код.

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

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

Посмотрите на следующий пример.

Класс Calc имеет два метода с одинаковым именем «добавить», но с разными параметрами.

Если мы вызовем метод add с двумя параметрами (например: - add( 5 , 6 ) ), будет вызван первый метод.

Если мы вызовем метод add с тремя параметрами (например: - add( 5 , 6 , 7) ), будет вызван второй метод.

Вот как работает перегрузка методов: методы с одинаковыми именами работают над разными задачами в зависимости от ситуации.

Раннее связывание

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

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

Здесь виртуальная машина Java определяет правильный метод для вызова во время выполнения, а не во время компиляции.

Это достигается за счет переопределения метода.

При переопределении метода подкласс переопределяет метод с той же сигнатурой, что и в его суперклассе.

JVM решает, какой метод вызывать во время выполнения в соответствии с типом ссылки.

Рассмотрим следующий пример.

Здесь метод makeSound() суперкласса Animal был переопределен в подклассах Cow и Cat.

Если мы вызовем метод makeSound() из ссылки на тип Animal, JVM вызовет метод makeSound() класса Animal, выводящий «makeSound».

Если мы вызовем метод makeSound() из ссылки на тип Cow, JVM вызовет метод makeSound() класса Cow, выводящий «moow».

Если мы вызовем метод makeSound() из ссылки на тип Cat, JVM вызовет метод makeSound() класса Cat, выводящий «мяу».

Позднее связывание

Когда компилятор не может решить, какой метод вызывать, компилятор оставляет это JVM, и это позднее связывание. Таким образом, переопределение метода также можно назвать поздним связыванием.