JavaRush /Курси /Java Syntax Zero /Перевантаження методів - overloading

Перевантаження методів - overloading

Java Syntax Zero
Рівень 18 , Лекція 5
Відкрита

Перевантаження методів

І ще одна нова та цікава тема на сьогодні — перевантаження методів. Або як її ще часто називають, overloading (перевизначення — це overriding).

На відміну від перевизначення, перевантаження — це дуже проста операція. Насправді це навіть не операція над методами, хоча іноді її називають страшним словосполученням — параметричний поліморфізм.

Справа в тому, що всі методи всередині класу повинні мати унікальні імена. Так ось, це не зовсім так. Вірніше, зовсім не так. Метод не повинен мати унікальне ім'я. Унікальним має бути об'єднання імені та типів параметрів цього методу. Такі об'єднання ще називають сигнатурами методів

Приклади:

Код Опис
public void print();
public void print2();
Так можна. Два методи мають унікальні імена.
public void print();
public void print(int n);
І так можна. Два методи мають унікальні імена (сигнатури).
public void print(int n, int n2);
public void print(int n);
Все ще унікальні методи
public int print(int a);
public void print(int n);
А так не можна. Методи — не унікальні. Хоч і повертають різні типи.
public int print(int a, long b);
public long print(long b, int a);
А так — можна. Параметри методів унікальні.

До сигнатури входить: ім'я методу і типи параметрів. Не входить: тип результату методу і імена параметрів. У класі не може бути двох методів з однаковими сигнатурами: компілятор не зрозуміє, який із них необхідно викликати.

Імена параметрів ролі не грають : вони втрачаються під час компіляції. Після компіляції про метод відомо лише його ім'я і типи параметрів. Тип результату не втрачається, але результат функції не обов’язково чомусь присвоювати, тому його теж не включають до сигнатури.

Відповідно до принципів ООП, поліморфізм — це приховування різних реалізацій за одним інтерфейсом. А оскільки при виклику методу System.out.println(), наприклад, залежно від параметрів викликаються різні методи, формально це підпадає під визначення поліморфізму.

Саме тому різні методи з однаковими іменами, які знаходяться в одному класі, прийнято вважати хоча й слабкою, але все ж формою поліморфізму.


Коментарі (12)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Den Deni Рівень 51
5 липня 2024
ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(a); numbers.add(b); numbers.add(c); numbers.add(d); numbers.add(i); return Collections.min(numbers); Моя версія рішення, для легкого зрозуміня коду)) Принаймні для мене.
Ва Дим Рівень 28
6 червня 2024
Тут у коментарях а я зробив через тернарний а я через Math а я рекурсію використав. Ну я я через if 😅
Василь Рівень 4
24 жовтня 2023
є зручний метод :

Math.min(a, b);
повертає мінімальне число, по аналогії можна зробити для максимального. Також можна писати так (рекурсивно визвати метод):

Math.min(a, Math.min(b, c));
TimpoIngo Рівень 38
13 вересня 2023
Я використав такий варівнт

public static int min(int n, int m, int h, int g, int k) {
        int value = Math.min(n, m) < Math.min(h, g) ? Math.min(n, m) : Math.min(h, g);
        return value < k ? value : k;
    }
Shura Рівень 20
27 липня 2023
"Згідно із принципами ООП поліморфізм — це приховування різних реалізацій в одному інтерфейсі." Я можливо трохи заплуталась, але що тоді інкапсуляція?
Владислав Рівень 26
19 березня 2023
Виконав всі перевірки за допомогою тернарного оператора, це має надзвичайно цікавий вигляд))
 
public static int min(int a, int b, int c, int d, int e){
        return a < b ? a < c ? a < d ? a < e ? a : e : d < e ? d : e : c < d ? c < e ? c : e : d < e ? d : e : b < c ? b < d ? b < e ? b : e : d < e ? d : e : c < d ? c < e ? c : e : d < e ? d : e;
    }
 
les_yeux_blancs Рівень 50
30 квітня 2023
краще ніколи в житті так не робити)
WhoAMI Рівень 51
21 грудня 2022
не розумію чому не сприймає варіант з рішенням через умову порівняння двох чисел? при чому з пошуком мінімального числа зараховує а з максимаьним ні
18 листопада 2022
Чому не розглядаються альтернативні варіанти вирішення, наприклад такий:

package ua.javarush.task.pro.task17.task1708;

/* 
Мінімальне й максимальне
*/

import java.util.Arrays;

public class MinMaxUtil {
    
    public static int min(int ... params){
        Arrays.sort(params);
       return params[0];
    }
   
    public static int max(int ... params){
        Arrays.sort(params);
       return params[params.length -1];
    }
}
Elder_HD Рівень 42 Expert
14 червня 2023
Спочатку так само хотів вирішити) але в умові чітко вказано, що необхідно створити 8 методів. А тут вже як замовник велів :)
Bandiu Band Рівень 25
28 вересня 2022
В задачі можна застосувати рекурсію: public static int max (int value, int value2, int value3, int value4) { int res=0; res = max(max(value,value2,value3),value4); return res; }
hnatiukk Рівень 51 Expert
13 грудня 2022
Але ж рекурсія це коли ми викликаємо метод в цьому самому методі, а тут викликаються інші. Така ситуація теж є рекурсією?