Автор оригинала: Pankaj Kumar.
Концепция перегрузки методов в Java заключается в том, что класс может иметь несколько методов с одинаковым именем при условии, что их конструкции аргументов различны. Перегрузка метода сравнима с перегрузкой конструктора, где мы можем реализовать несколько конструкторов (также с одинаковым именем), при условии, что эти конструкторы имеют различную конструкцию аргументов.
Перегрузка методов в Java
- Имя метода должно быть точно таким же. Java чувствительна к регистру, поэтому два метода с именем
foo()
иfOO()
совершенно разные и не подпадают под перегрузку методов в java. - Разница между перегруженными методами заключается в аргументах. Перегруженные методы должны иметь разные аргументы метода. Например, разное количество параметров, разные типы данных параметров и т.д.
- Тип возвращаемого метода не имеет значения для перегрузки, компилятор java будет жаловаться на дублирование метода в классе.
- Имена параметров метода не имеют значения при перегрузке метода. Таким образом, с точки зрения java,
foo(индекс int)
иfoo(int i)
одинаковы. - Перегрузка метода также называется полиморфизмом времени компиляции. Подробнее читайте в Концепции OOPS в Java .
Давайте рассмотрим некоторые примеры перегрузки методов в java.
Перегрузка метода в примере Java
package com.journaldev.methodoverloading; public class GetAverage { private static void gatherInput(int dataOne, int dataTwo) { }; private static void gatherInput(int dataThree, String dataFour, float dataFive) { }; }
Приведенный выше фрагмент показывает классический пример перегрузки метода. Два метода gather Input()
объявлены в Get Average
классе. В обычных случаях компилятор java отобразил бы ошибку: Дублирующий метод сбора входных данных() в типе Get Average
. Однако в этом случае мы видим, что два метода обладают разным списком аргументов, что делает этот подход в java допустимым.
Случаи, когда допустима перегрузка метода
Количество параметров : Перегрузка методов допускается в классе, учитывая, что количество параметров перегруженных методов не одинаковое.
Типы данных параметров : Перегрузка методов допускается в классе, если по крайней мере одна пара параметров из каждого перегруженного метода имеет разные типы данных.
Порядок параметров : Перегрузка методов допускается в классе, учитывая, что порядок переменных типа данных не одинаков для перегруженных методов.
Пример, когда перегрузка метода недопустима
Тип возвращаемого метода : Перегрузка метода запрещена в классе с методами, имеющими идентичный список параметров, но с другим типом возвращаемого метода. Имейте в виду, что перегрузка фокусируется на параметрах, а не на типе возвращаемого значения.
Приведенный выше код приведет к ошибке компилятора:
Дублированный метод сбора входных данных(int, double) в типе Get Average
.
Продвижение типов на Java
Продвижение типов-это концепция java, в которой тип данных меньшего ранга повышается до типа данных более высокого ранга. На рисунке ниже показан порядок продвижения размера типа данных:
Как видно из приведенной выше диаграммы, байт может быть увеличен до короткого. Тип данных Int имеет три возможных продвижения: двойное, длинное или плавающее.
Продвижение типов и перегрузка методов в Java
Продвижение типов идет рука об руку с перегрузкой методов в Java. Продвижение типов расширяет логику перегрузки методов, когда дело доходит до принятия решения о том, какой перегруженный метод используется, в случаях, когда передаваемые значения не совпадают ни с одним из установленных типов данных параметров.
Примечание : Тип данных переданного значения автоматически перемещается в следующий тип данных в строке (см. Рисунок выше), если соответствующий тип данных не найден.
Давайте рассмотрим некоторые примеры продвижения и перегрузки типов в java.
Пример продвижения типа 1 :
Выход : 10 тип длиной
Два целых числа передаются в перегруженном методе add (). Поскольку никакие методы перегрузки не обладают аргументами (int, int), переданные значения будут переведены в ближайший больший тип, т. Е. long.
Пример продвижения типа 2 :
Вывод : 10.0 тип поплавка
Здесь ближайший больший тип для int-float, отсюда и вывод.
Пример продвижения типа 3 :
Здесь компилятор java выдаст ошибку, так как
Метод add(double, int) неоднозначен для примера продвижения типа
. Это связано с тем, что применимы оба метода, и для выполнения любого из них требуется преобразование типов, поэтому компилятор java не может решить, какой из них выбрать.
Перегрузка метода в допустимых/недопустимых случаях Java
Давайте рассмотрим некоторые фрагменты кода для варианта использования с перегрузкой метода, независимо от того, являются ли они допустимыми или нет.
- Перегрузка метода в примере Java 1
Сообщение об ошибке во время компиляции
Метод дублирования метода(int, int, int)
. Даже если имена переменных различаются, java рассматривает только создаваемые типы данных, и в этом примере оба они идентичны(int, int, int). - Перегрузка метода в примере Java 2
Допустимый случай перегрузки метода. Типы аргументов данных различны.
- Перегрузка метода в примере Java 3
Допустимый случай перегрузки метода, количество аргументов разное.
- Перегрузка метода в примере Java 4
Допустимый случай перегрузки метода. Последовательность типов данных параметров различна, первый метод имеет (int, float), а второй – (float, int).
- Перегрузка метода в примере Java 5
Ошибка во время компиляции, поскольку списки аргументов идентичны. Даже если возвращаемый тип методов и имена переменных разные, это недопустимый случай. Поскольку литералы возвращаемого типа или имени переменной не являются критериями перегрузки метода.
Это все для перегрузки методов в java.
Ссылка: Википедия