Перейти до основного вмісту
Модуль 2 · Урок 2 із 24/14 у курсі~12 min
Модульні уроки (2/2)

Методи та перевантаження

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

Визначення методу

Метод у Java складається з:

  1. Модифікатор доступу (наприклад, public, private).
  2. Тип повернення (наприклад, int, String або void, якщо нічого не повертається).
  3. Назва методу в camelCase.
  4. Параметри в дужках.
  5. Тіло методу, укладене у фігурні дужки.
Java
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    // Method with return type String
    public String greet() {
        return "Ciao, mi chiamo " + name;
    }
}

Виклик методу

Щоб викликати метод у створеному об’єкті, ми використовуємо крапкову нотацію .:

Java
public class Main {
    public static void main(String[] args) {
        Person p = new Person("Marco");
        String message = p.greet(); // Calling the method
        System.out.println(message);
    }
}

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

У Java два або більше методів в одному класі можуть мати те саме ім’я, якщо вони мають різний список параметрів (за кількістю, порядком або типами параметрів). Ця концепція відома як Перевантаження.

Компілятор вирішує, який метод викликати, аналізуючи аргументи, передані під час виклику.

Java
class Printer {
    // Method to print an integer
    public void printValue(int number) {
        System.out.println("Intero: " + number);
    }

    // Overloaded method to print a string
    public void printValue(String text) {
        System.out.println("Testo: " + text);
    }
}

Передача параметрів за значенням

У Java всі параметри передаються за значенням (pass-by-value). Це означає, що коли ви передаєте аргумент методу, Java створює копію значення змінної та передає її методу.

  • Для примітивних типів вихідне значення за межами методу ніколи не змінюється, навіть якщо змінено всередині методу.
  • Для об’єктів/посилань посилання на об’єкт копіюється. Це означає, що хоча ми не можемо змінити адресу пам’яті, на яку вказує оригінальний об’єкт, ми можемо змінити його внутрішній стан (наприклад, його поля), і ці зміни будуть видимі ззовні.

Обмеження перевантаження: тип повернення

Важливо зауважити, що ви не можете перевантажувати метод, заснований виключно на типі повернення. Наприклад, наступний код спричинить помилку компіляції:

Java
class Example {
    // ERROR: The signature of the two methods is considered identical
    public int getNumber() { return 42; }
    public double getNumber() { return 42.0; }
}

Компілятор повинен розрізняти методи, засновані лише на параметрах, щоб вирішити, яку версію викликати під час компіляції (перевантаження вирішується під час компіляції).


Спробуйте самі

вправи#java.m2.l2.e1
Спроби: 0Завантаження…

Додайте відкритий метод int add(int a, int b) до класу Calculator, який повертає суму двох чисел. У основному методі викличте цей метод для об’єкта calc і призначте результат цілочисельній змінній.

Завантаження редактора…
Показати підказку

Оголошіть метод як `public int add(int a, int b) { return a + b; }` і викликати його в основному методі як `int result = calc.add(5, 10);`.

Рішення доступне після 3 спроб

вправи#java.m2.l2.e2
Спроби: 0Завантаження…

Перевантажте метод add у класі Calculator, створивши інший метод, який приймає два подвійні параметри та повертає їх суму.

Завантаження редактора…
Показати підказку

Напишіть `public double add(double a, double b) { return a + b; }` безпосередньо під першим методом додавання.

Рішення доступне після 3 спроб

вправи#java.m2.l2.e3
Спроби: 0Завантаження…

Додайте відкритий метод int multiply(int a, int b) до класу Calculator, який повертає добуток двох чисел. У основному методі викличте цей метод для об’єкта calc і призначте результат цілочисельній змінній.

Завантаження редактора…
Показати підказку

Оголошіть метод як `public int multiply(int a, int b) { return a * b; }` і викликати його в основному методі як `int result = calc.multiply(5, 10);`.

Рішення доступне після 3 спроб