Переопределение метода и перегрузка - две формы полиморфизма, поддерживаемые Java.

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

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

Таким образом, пользователь может вызвать один и тот же метод для области в зависимости от типа ее формы.

Но теперь реальный вопрос заключается в том, как компилятор java будет различать, какое тело метода должно выполняться?

Что ж, Java прояснила, что даже если имена методов (`area ()` в нашем случае) могут быть такими же, но метод аргументов должен быть разные.

›Перегруженные методы должны иметь разный список аргументов (количество и типы).

При этом мы не можем добавить другой метод для вычисления площади квадрата, например: `public Double area (Long side)`, потому что в этом случае он будет конфликтовать с методом площади круга и вызовет двусмысленность для компилятора java.

Слава богу, есть некоторые расслабления при написании перегруженных методов, например,
›Может иметь разные типы возврата.

›Могут иметь разные модификаторы доступа.

›Могут выдавать разные исключения.

Почему это называется статическим полиморфизмом?

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

›Одна из распространенных причин использования перегрузки метода - простота кода, который он предоставляет. Например, помните `String.valueOf ()`, который принимает почти любой тип аргумента? То, что написано за кадром, вероятно, выглядит примерно так:

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

Что ж, переопределение метода (да, вы правильно угадали, это также известно как динамический полиморфизм) - это несколько более интересная и сложная тема.

При переопределении метода мы перезаписываем тело метода, предоставленное родительским классом. Понятно? Нет? Давайте рассмотрим пример.

Итак, у нас есть класс Shape и у него есть метод area, который, вероятно, вернет площадь формы.

Допустим, теперь у нас есть два класса, которые называются Circle и Rectangle.

Аналогично класс прямоугольника:

Итак, теперь оба ваших дочерних класса обновили тело метода, предоставленное родительским (`Shape`) классом. Теперь вопрос в том, как увидеть результат? Что ж, давайте сделаем это старым способом `psvm`.

Вау! разве это не здорово? Два объекта одного типа вызывают одни и те же методы и возвращают разные значения. Мой друг, в этом сила динамического полиморфизма.