Рубрики
Без рубрики

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

Перегрузка методов в Java, Перегрузка в Java, перегрузка функций в java, продвижение типов в java, неоднозначная перегрузка методов, ошибка дублирующего метода

Автор оригинала: 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 допустимым.

Случаи, когда допустима перегрузка метода

  1. Количество параметров : Перегрузка методов допускается в классе, учитывая, что количество параметров перегруженных методов не одинаковое.

  2. Типы данных параметров : Перегрузка методов допускается в классе, если по крайней мере одна пара параметров из каждого перегруженного метода имеет разные типы данных.

  3. Порядок параметров : Перегрузка методов допускается в классе, учитывая, что порядок переменных типа данных не одинаков для перегруженных методов.

Пример, когда перегрузка метода недопустима

  • Тип возвращаемого метода : Перегрузка метода запрещена в классе с методами, имеющими идентичный список параметров, но с другим типом возвращаемого метода. Имейте в виду, что перегрузка фокусируется на параметрах, а не на типе возвращаемого значения.

    Приведенный выше код приведет к ошибке компилятора: Дублированный метод сбора входных данных(int, double) в типе Get Average .

Продвижение типов на Java

Продвижение типов-это концепция java, в которой тип данных меньшего ранга повышается до типа данных более высокого ранга. На рисунке ниже показан порядок продвижения размера типа данных:

Как видно из приведенной выше диаграммы, байт может быть увеличен до короткого. Тип данных Int имеет три возможных продвижения: двойное, длинное или плавающее.

Продвижение типов и перегрузка методов в Java

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

Примечание : Тип данных переданного значения автоматически перемещается в следующий тип данных в строке (см. Рисунок выше), если соответствующий тип данных не найден.

Давайте рассмотрим некоторые примеры продвижения и перегрузки типов в java.

  1. Пример продвижения типа 1 :

    Выход : 10 тип длиной

    Два целых числа передаются в перегруженном методе add (). Поскольку никакие методы перегрузки не обладают аргументами (int, int), переданные значения будут переведены в ближайший больший тип, т. Е. long.

  2. Пример продвижения типа 2 :

    Вывод : 10.0 тип поплавка

    Здесь ближайший больший тип для int-float, отсюда и вывод.

  3. Пример продвижения типа 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.

Ссылка: Википедия