Модульні уроки (2/2)
Методи та перевантаження
Методи визначають поведінку об’єкта. Ми можемо думати про них як про функції, оголошені всередині класу, які працюють з полями екземплярів об’єкта або вхідними параметрами.
Визначення методу
Метод у Java складається з:
- Модифікатор доступу (наприклад,
public,private). - Тип повернення (наприклад,
int,Stringабоvoid, якщо нічого не повертається). - Назва методу в
camelCase. - Параметри в дужках.
- Тіло методу, укладене у фігурні дужки.
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Method with return type String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}Виклик методу
Щоб викликати метод у створеному об’єкті, ми використовуємо крапкову нотацію .:
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 два або більше методів в одному класі можуть мати те саме ім’я, якщо вони мають різний список параметрів (за кількістю, порядком або типами параметрів). Ця концепція відома як Перевантаження.
Компілятор вирішує, який метод викликати, аналізуючи аргументи, передані під час виклику.
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 створює копію значення змінної та передає її методу.
- Для примітивних типів вихідне значення за межами методу ніколи не змінюється, навіть якщо змінено всередині методу.
- Для об’єктів/посилань посилання на об’єкт копіюється. Це означає, що хоча ми не можемо змінити адресу пам’яті, на яку вказує оригінальний об’єкт, ми можемо змінити його внутрішній стан (наприклад, його поля), і ці зміни будуть видимі ззовні.
Обмеження перевантаження: тип повернення
Важливо зауважити, що ви не можете перевантажувати метод, заснований виключно на типі повернення. Наприклад, наступний код спричинить помилку компіляції:
class Example {
// ERROR: The signature of the two methods is considered identical
public int getNumber() { return 42; }
public double getNumber() { return 42.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 спроб
Перевантажте метод add у класі Calculator, створивши інший метод, який приймає два подвійні параметри та повертає їх суму.
Показати підказку
Напишіть `public double add(double a, double b) { return a + b; }` безпосередньо під першим методом додавання.
Рішення доступне після 3 спроб
Додайте відкритий метод 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 спроб