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

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

Відкрита

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

Ще одна нова й цікава тема на сьогодні — перевантаження методів. Цей процес також часто називають, 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(), залежно від параметрів викликаються різні методи, формально це підпадає під визначення поліморфізму.

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


18
Задача
Java Syntax Zero,  18 рівень,  5 лекція
Недоступна
Мінімальне й максимальне
Мінімальне й максимальне
Коментарі (12)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Den Deni
Рівень 51
5 липня 2024, 08:13
ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(a); numbers.add(b); numbers.add(c); numbers.add(d); numbers.add(i); return Collections.min(numbers); Моя версія рішення, для легкого зрозуміня коду)) Принаймні для мене.
hidden #3421731
Рівень 28
6 червня 2024, 10:54
Тут у коментарях а я зробив через тернарний а я через Math а я рекурсію використав. Ну я я через if 😅
Василь trainee в Kindgeek
24 жовтня 2023, 13:07
є зручний метод :
Math.min(a, b);
повертає мінімальне число, по аналогії можна зробити для максимального. Також можна писати так (рекурсивно визвати метод):
Math.min(a, Math.min(b, c));
TimpoIngo
Рівень 38
13 вересня 2023, 20:16
Я використав такий варівнт
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, 18:33
"Згідно із принципами ООП поліморфізм — це приховування різних реалізацій в одному інтерфейсі." Я можливо трохи заплуталась, але що тоді інкапсуляція?
Владислав
Рівень 26
19 березня 2023, 16:12
Виконав всі перевірки за допомогою тернарного оператора, це має надзвичайно цікавий вигляд))
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 QA Automation Engineer
30 квітня 2023, 19:23
краще ніколи в житті так не робити)
WhoAMI
Рівень 51
21 грудня 2022, 17:26
не розумію чому не сприймає варіант з рішенням через умову порівняння двох чисел? при чому з пошуком мінімального числа зараховує а з максимаьним ні
Владислав Целина Team Lead в gov.auction
18 листопада 2022, 20:58
Чому не розглядаються альтернативні варіанти вирішення, наприклад такий:
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 Працює в UPCExpert
14 червня 2023, 20:51
Спочатку так само хотів вирішити) але в умові чітко вказано, що необхідно створити 8 методів. А тут вже як замовник велів :)
Bandiu Band
Рівень 25
28 вересня 2022, 20:00
В задачі можна застосувати рекурсію: 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, 19:04
Але ж рекурсія це коли ми викликаємо метод в цьому самому методі, а тут викликаються інші. Така ситуація теж є рекурсією?