← Назад к вопросам

Является ли перегрузка методов частью полиморфизма?

1.6 Junior🔥 131 комментариев
#ООП

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Перегрузка методов как часть полиморфизма

Да, перегрузка методов (method overloading) является частью полиморфизма. Это один из двух основных типов полиморфизма в Java, наряду с переопределением методов (method overriding).

Понимание полиморфизма

Полиморфизм в Java означает "много форм". Он позволяет объектам принимать множество форм и методам работать с объектами различных типов.

Виды полиморфизма в Java

1. Статический полиморфизм (Compile-time)

Перегрузка методов — это пример статического полиморфизма. Методы с одинаковым именем, но разными параметрами считаются разными методами:

public class Calculator {
    // Перегруженные методы add
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public String add(String a, String b) {
        return a + " " + b;
    }
}

Calculator calc = new Calculator();
System.out.println(calc.add(5, 10));           // 15
System.out.println(calc.add(5.5, 10.5));       // 16.0
System.out.println(calc.add(5, 10, 15));       // 30
System.out.println(calc.add("Hello", "World")); // Hello World

2. Динамический полиморфизм (Runtime)

Переопределение методов — это пример динамического полиморфизма. Происходит во время выполнения программы:

class Animal {
    public void sound() {
        System.out.println("Издаёт звук");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Гав!");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Мяу!");
    }
}

Animal dog = new Dog();
Animal cat = new Cat();

dog.sound(); // Гав!
cat.sound(); // Мяу!

Правила перегрузки методов

Для корректной перегрузки должно измениться одно из следующего:

  1. Количество параметров
  2. Тип параметров
  3. Порядок параметров (если типы разные)
// ✅ Правильные перегрузки
public void method(int a) { }
public void method(int a, int b) { }
public void method(String a) { }
public void method(int a, String b) { }
public void method(String a, int b) { }

// ❌ Неправильные перегрузки
// public void method(int a) { }
// public int method(int a) { } — тип возвращаемого значения НЕ учитывается!

Различия между перегрузкой и переопределением

ХарактеристикаПерегрузка (Overloading)Переопределение (Overriding)
Тип полиморфизмаСтатический (compile-time)Динамический (runtime)
Когда решаетсяПри компиляцииПри выполнении
НаследованиеНе требуетсяТребуется (наследование или имплементация)
ИзменениеПараметрыРеализация метода
СигнатураРазные сигнатурыОдинаковая сигнатура

Практический пример

class PaymentProcessor {
    // Перегрузка методов
    public double processPayment(double amount) {
        return amount * 1.02; // 2% комиссия
    }
    
    public double processPayment(double amount, double discount) {
        return (amount - discount) * 1.02;
    }
    
    public double processPayment(double amount, String currency) {
        // Обработка в зависимости от валюты
        return amount;
    }
}

Заключение

Пеregрузка методов — это явная часть полиморфизма в Java, конкретно статического полиморфизма. Вместе с переопределением методов она позволяет создавать гибкий и переиспользуемый код, упрощая работу с методами одного функционального назначения но разные входные данные.

Является ли перегрузка методов частью полиморфизма? | PrepBro