Уроки модуля (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 все параметры передаются по значению (передача по значению). Это означает, что когда вы передаете аргумент методу, 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, создав другой метод, который принимает два параметра типа double и возвращает их сумму.
Показать подсказку
Напишите `public double add(double a, double b) { return a + b; }` непосредственно под первым методом добавления.
Решение доступно после 3 попыток
Добавьте в класс Calculator общедоступный метод Int Multiple(int a, int b), который возвращает произведение двух чисел. В основном методе вызовите этот метод для объекта Calc и присвойте результат целочисленной переменной.
Показать подсказку
Объявите метод как `public int Multiple(int a, int b) { return a * b; }` и вызовите его в основном методе как `int result =calc.multiply(5, 10);`.
Решение доступно после 3 попыток