Перейти к основному содержимому
Модуль 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 все параметры передаются по значению (передача по значению). Это означает, что когда вы передаете аргумент методу, 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, создав другой метод, который принимает два параметра типа double и возвращает их сумму.

Загрузка редактора…
Показать подсказку

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

Решение доступно после 3 попыток

Упражнение#java.m2.l2.e3
Попыток: 0Загрузка…

Добавьте в класс 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 попыток