Перегрузка методов в Java
Данная статья:
- написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
- это одна из статей из нашего "Самоучителя по Java"
Давайте проведем эксперимент
Представим, что у нас есть такой код, в котором есть два метода с одинаковым названием:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Dog{ private String name; private String poroda; private int age; public Dog(String x){ name = x; } public Dog(String x, String y, int z){ name = x; poroda = y; age = z; } } |
Как Вы видите, тут есть два конструктора (если впервые слышите слово "конструктор", Вам следует почитать статью "Конструкторы в Java"). У них разные параметры, но называются они одинаково. У Вас выдает ошибку?
Нет.
Почему?
Дело в том, что у Java есть одна особенность - она позволяет производить перегрузку методов. Перегрузка методов - это возможность создавать несколько методов с одинаковым названием, но разными параметрами. Не все языки программирования позволяют это делать. Перегрузка методов - это часть такой составляющей ООП, как полиморфизм. (Если Вы не знаете, что такое ООП и полиморфизм - вернитесь к этой статье).
Обратите внимание: если Вы захотите создать два метода с одинаковым названием, которые будут требовать одни и те же параметры, возникнет ошибка.
Зачем?
Вот, есть у меня в программе один метод print или один конструктор Dog. Зачем мне еще один?
Дело в том, что перегрузка методов выполняет несколько функций:
1. Вы можете создать несколько конструкторов - с одним, двумя параметрами, и вообще без параметров. Программа будет выбирать тот, который подходит под заданные параметры. Например:
1 2 3 4 5 6 7 8 |
class Test { public static void main (String args[]){ Cat cat1 = new Cat(); Cat cat2 = new Cat("Murka"); Cat cat3 = new Cat("Marka", white); } } |
Предположим, Вы еще не знаете имя первого кота и его породу. А для второго - только имя. В такой ситуации, несколько конструкторов дают возможность сделать все аккуратно и красиво 🙂
2. В первом примере мы говорили о конструкторах. Но то же самое применимо и к обычным методам. Одним из главных плюсов является то, что Вам не нужно запоминать названия кучи методов, выполняющих похожую функцию. Представим, что мы хотим создать метод "add", общий для всех типов. У нас есть int, double и String:
1 2 3 4 5 6 7 8 9 |
class Test { public static void main (String args[]){ int a = 100; double b = 1.1; String d = "vertex"; } } |
Теперь, мы хотим создать общий для всех метод "add". Он будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Test { public static void main (String args[]){ int a = 100; double b = 1.1; String c = "vertex"; } public static int add (int a, int b){ return a+= b; } public static double add (double a, double b){ return a+= b; } public static String add (String a, String b){ return a.concat(b); } } |
Применим наш метод и выведем результат на экран:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class Test { public static void main (String args[]){ int a = 100; double b = 1.1; String c = "vertex"; System.out.println(add(a,a)); System.out.println(add(b,b)); System.out.println(add(c,c)); } public static int add (int a, int b){ return a+= b; } public static double add (double a, double b){ return a+= b; } public static String add (String a, String b){ return a.concat(b); } } |
Должно получиться следующее:
- 200
- 2.2
- vertexvertex
Как Вы видите, благодаря перегрузке методов мы можем запомнить один метод - add - и с помощью него выполнить 3 операции. Будь это другой язык программирования, который не поддерживает перегрузку, необходимо было бы создать (и запомнить) методы addInt, addDouble и, например, addStr. И так с каждой операцией!
Подводя итог
Теперь Вы знаете, что такое перегрузка методов в Java и зачем она нужна - чтобы облегчить Вам жизнь.
Удачи!
Данная статья написана Vertex Academy. Будем рады видеть Вас у нас на курсах Java. Детальнее на сайте.