Перегрузка методов (Overloading)

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

Перегрузка методов (overloading) — создание нескольких методов с одинаковым именем, но разными параметрами. Компилятор выбирает нужный метод по сигнатуре вызова.

  • Методы различаются по количеству, типам или порядку параметров
  • Возвращаемый тип не участвует в определении перегрузки
  • Пример: print(int x) и print(String s)

Перегрузка делает код читаемым — одно имя для схожих операций. Этот онлайн-тренажёр содержит практические задания на создание и использование перегруженных методов. Примеры и тесты помогут понять правила разрешения перегрузки в Java.

Список тем

1. Заполнить параметры метода

id: 40471_overload_01

В этом задании вам нужно дополнить два перегруженных метода, заполнив пропущенные элементы. Обратите внимание, что методы имеют одинаковое имя, но различаются параметрами. В одном методе пропущен тип параметра, в другом — имя параметра. Ваша задача — вставить корректные значения так, чтобы методы могли быть использованы для вывода информации о пользователе. Учтите, что перегрузка методов требует различия в типах или количестве параметров.

Заполните пропуски
public class UserInfo {
    // Выводит имя пользователя
    public static void printInfo(input1S name) {
        System.out.println("Имя: " + name);
    }
    
    // Выводит имя и возраст пользователя
    public static void printInfo(String name, int input2S) {
        System.out.println("Имя: " + name + ", Возраст: " + input2S);
    }
    
    public static void main(String[] args) {
        printInfo("Анна");
        printInfo("Иван", 30);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Найти ошибку перегрузки

id: 40471_overload_02

В данном фрагменте Java-кода допущена ошибка, связанная с перегрузкой методов. Два метода имеют одинаковое имя и одинаковые параметры, но разные возвращаемые типы, что приводит к ошибке компиляции. Найдите метод, который вызывает конфликт, и исправьте его, изменив параметры так, чтобы методы стали корректно перегруженными. Обратите внимание, что изменять нужно только параметры, а не возвращаемый тип или имя метода.

Найдите ошибку и исправьте
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
 
    public double add(int a, int b) {
        return (double) (a + b);
    }
 
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(5, 3));
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Собрать перегруженные методы

id: 40471_overload_03

Из предложенных строк соберите корректный Java-класс с тремя перегруженными методами print. Методы должны выводить на экран сообщения с соответствующими типами данных. Одна из строк является лишней (дублирует сигнатуру одного из методов) и не должна входить в решение.

Перетяните в правильном порядке строки из одного блока в другой
public class OverloadExample {
    public void print(int x) {
        System.out.println("Целое число: " + x); }
    public void print(double x) {
        System.out.println("Дробное число: " + x); }
    public void print(String s) {
        System.out.println("Строка: " + s); }
}
    public void print(int x) { System.out.println("Еще одно целое число: " + x); }
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Какой метод будет вызван

id: 40471_overload_04

Проанализируйте представленный код на Java, содержащий класс с тремя перегруженными методами process(). Определите, какой именно метод будет вызван при выполнении строки demo.process(10.5) в методе main. Обратите внимание на типы параметров методов и тип передаваемого аргумента.

Выберите правильный вариант ответа
class OverloadDemo {
    void process(int x) {
        System.out.println("Вызван метод с int: " + x);
    }
    void process(double x) {
        System.out.println("Вызван метод с double: " + x);
    }
    void process(String x) {
        System.out.println("Вызван метод с String: " + x);
    }

    public static void main(String[] args) {
        OverloadDemo demo = new OverloadDemo();
        demo.process(10.5);
    }
}
Сообщения
Проверить
Показать подсказку

5. Вызовы и методы

id: 40471_overload_05

В левой колонке приведены вызовы перегруженного метода process с различными аргументами. В правой колонке приведены сигнатуры методов. Сопоставьте каждый вызов метода с той сигнатурой, которая будет вызвана в соответствии с правилами разрешения перегрузки в Java. Обратите внимание на типы и количество аргументов. Все пары однозначны.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
process(5);
process(5.0);
process("hello");
process(5, 10);
process(5, 10.0);
void process(String s)
void process(int a)
void process(double a)
void process(int a, double b)
void process(int a, int b)
Сообщения
Проверить
Показать подсказку

6. Приоритет разрешения перегрузки

id: 40471_overload_06

В Java при вызове перегруженного метода компилятор выбирает наиболее подходящий вариант по определённым правилам. Эти правила применяются в строгом порядке приоритета. Перед вами четыре шага, описывающие эти правила, но они перемешаны. Расставьте шаги в том порядке, в котором компилятор Java проверяет их при разрешении перегрузки методов, начиная с самого высокого приоритета.

Расставьте строки в правильном порядке
Автоупаковка (autoboxing) — преобразование примитивного типа в соответствующий класс-обёртку, например int в Integer.
Varargs (аргументы переменной длины) — метод с переменным числом аргументов, если другие варианты не подошли.
Расширение примитивных типов (widening primitive conversion) — неявное преобразование примитива в более широкий тип, например byte -> short -> int -> long -> float -> double.
Точное совпадение типов (exact match) — типы аргументов при вызове полностью совпадают с типами параметров метода.
Сообщения
Проверить
Показать подсказку

7. Разметить сигнатуру метода

id: 40471_overload_07

В этом задании вам нужно разметить сигнатуру метода в Java. Дано объявление метода. Разметьте каждый выделенный сегмент, указав его тип: модификатор доступа, возвращаемый тип, имя метода, тип параметра или имя параметра. Это поможет лучше понять структуру объявлений методов в Java и подготовиться к теме перегрузки методов, где методы имеют одно имя, но различаются параметрами.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
{{public~|~t1}} {{int~|~t2}} {{calculateSum~|~t3}}({{int~|~t4}} {{a~|~t5}})
Имя метода
Тип параметра
Имя параметра
Модификатор доступа
Возвращаемый тип
Сообщения
Проверить
Показать подсказку

8. Выбрать типы параметров

id: 40471_overload_08

Complete the Java code to create two overloaded methods named 'calculate'. Select appropriate parameter types from the dropdown list so that the methods have different signatures - one method should accept two parameters of different types, and the other should accept a single parameter. Remember that method overloading requires different parameter lists (different number of parameters or different parameter types).

Нужно правильно расставить в пропуски предложенные варианты
public class Calculator {
    public void calculate(input1S a, input2S b) {
        System.out.println("Two parameters: " + a + ", " + b);
    }
    
    public void calculate(input3S c) {
        System.out.println("One parameter: " + c);
    }
    
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        calc.calculate(10, 20.5);
        calc.calculate("Hello");
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру