Рубрики

Перегрузка в Java

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

// Java-программа для демонстрации работы метода
// перегрузка в Java.

  

public class Sum {

  

    // Перегруженная сумма (). Эта сумма принимает два параметра int

    public int sum(int x, int y)

    {

        return (x + y);

    }

  

    // Перегруженная сумма (). Эта сумма принимает три параметра int

    public int sum(int x, int y, int z)

    {

        return (x + y + z);

    }

  

    // Перегруженная сумма (). Эта сумма принимает два двойных параметра

    public double sum(double x, double y)

    {

        return (x + y);

    }

  

    // Код драйвера

    public static void main(String args[])

    {

        Sum s = new Sum();

        System.out.println(s.sum(10, 20));

        System.out.println(s.sum(10, 20, 30));

        System.out.println(s.sum(10.5, 20.5));

    }

}

Выход :

30
60
31.0

Возникает вопрос:
В. Что если точный прототип не совпадает с аргументами.

Отв.
Приоритетный компилятор предпринимает следующие шаги:

  1. Преобразование типов, но в более высокий тип (с точки зрения диапазона) в том же семействе.
  2. Преобразование типов в следующее более высокое семейство (предположим, что если для типа данных int нет длинного типа данных, он будет искать тип данных с плавающей запятой).

Давайте рассмотрим пример, чтобы прояснить концепцию:

class Demo {

    public void show(int x)

    {

        System.out.println("In int" + x);

    }

    public void show(String s)

    {

        System.out.println("In String" + s);

    }

    public void show(byte b)

    {

        System.out.println("In byte" + b);

    }

}

class UseDemo {

    public static void main(String[] args)

    {

        byte a = 25;

        Demo obj = new Demo();

        obj.show(a); // это пойдет в

        // байтный аргумент

        obj.show("hello"); // Строка

        obj.show(250); // Int

        obj.show('A'); // Так как char

        // недоступно, поэтому тип данных

        // выше чем char с точки зрения

        // диапазон int.

        obj.show("A"); // Строка

        obj.show(7.5); // поскольку тип данных float

// недоступен и поэтому выше
// тип данных, поэтому на этом этапе их
// будет ошибка.
}
}

В чем преимущество?
Нам не нужно создавать и запоминать разные имена для функций, выполняющих одно и то же. Например, в нашем коде, если бы перегрузка не поддерживалась Java, нам пришлось бы создавать имена методов, такие как sum1, sum2,… или sum2Int, sum3Int и т. Д.

Можем ли мы перегружать методы по типу возвращаемого значения?
Мы не можем перегрузить типом возвращаемого значения. Это поведение такое же в C ++. См. Это для деталей

public class Main {

    public int foo() { return 10; }

  

    // ошибка компилятора: foo () уже определена

    public char foo() { return 'a'; }

  

    public static void main(String args[])

    {

    }

}

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

// Java-программа для демонстрации работы метода
// перегрузка в статических методах

public class Main {

  

    public static int foo(int a) { return 10; }

    public static char foo(int a, int b) { return 'a'; }

  

    public static void main(String args[])

    {

        System.out.println(foo(1));

        System.out.println(foo(1, 2));

    }

}

Выход:

10
a

// Java-программа для демонстрации работы метода
// перегрузка в методах

class A {

    public int foo(int a) { return 10; }

  

    public char foo(int a, int b) { return 'a'; }

}

  

public class Main {

  

    public static void main(String args[])

    {

        A a = new A();

        System.out.println(a.foo(1));

        System.out.println(a.foo(1, 2));

    }

}

Выход:

10
a

Можем ли мы перегрузить статические методы?
Ответ « Да ». У нас может быть два или более статических метода с одинаковыми именами, но с различиями во входных параметрах. Например, рассмотрим следующую программу Java. Обратитесь к этому для деталей.

Можем ли мы перегрузить методы, которые отличаются только статическим ключевым словом?
Мы не можем перегрузить два метода в Java, если они отличаются только статическим ключевым словом (количество параметров и типы параметров одинаковы). См. Следующую программу Java для примера. Обратитесь к этому для деталей.

Можем ли мы перегрузить main () в Java?
Как и другие статические методы, мы можем перегрузить main () в Java . Обратитесь к перегрузке main () в Java для более подробной информации.

// Java-программа с перегруженным main ()

import java.io.*;

  

public class Test {

  

    // Нормальный main ()

    public static void main(String[] args)

    {

        System.out.println("Hi Geek (from main)");

        Test.main("Geek");

    }

  

    // перегружены основные методы

    public static void main(String arg1)

    {

        System.out.println("Hi, " + arg1);

        Test.main("Dear Geek", "My Geek");

    }

    public static void main(String arg1, String arg2)

    {

        System.out.println("Hi, " + arg1 + ", " + arg2);

    }

}

Выход :

Hi Geek (from main)
Hi, Geek
Hi, Dear Geek, My Geek

Поддерживает ли Java перегрузку операторов?
В отличие от C ++, Java не допускает пользовательских перегруженных операторов. Внутренне Java перегружает операторы, например, + перегружается для конкатенации.

В чем разница между перегрузкой и переопределением ?

  • Перегрузка примерно одной и той же функции имеет разные подписи. Переопределение касается одной и той же функции, одной и той же сигнатуры, но разных классов, связанных через наследование.
  • Перегрузка является примером полиморфизма времени компиляции, а переопределение — примером полиморфизма времени выполнения.

Статьи по Теме:

Эта статья предоставлена Shubham Agrawal . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Перегрузка в Java

0.00 (0%) 0 votes