Sobes.tech
Назад к вопросам
Junior — Middle
61

Можете объяснить различия между настоящим и фиктивным полиморфизмом в программировании?

Ответ от нейросети

sobes.tech AI

В программировании под полиморфизмом понимается способность объектов разных классов реагировать на одинаковые сообщения (методы) по-разному.

  • Настоящий (динамический) полиморфизм реализуется через наследование и переопределение методов. В Java это достигается с помощью виртуальных методов и механизмов, таких как интерфейсы и абстрактные классы. Вызов метода определяется во время выполнения (runtime), что позволяет объектам вести себя по-разному в зависимости от своего реального типа.

  • Фиктивный (статический) полиморфизм — это перегрузка методов (overloading), когда несколько методов имеют одно имя, но разные параметры. Выбор конкретного метода происходит во время компиляции (compile-time), а не во время выполнения.

Пример:

class Animal {
    void sound() { System.out.println("Some sound"); }
}

class Dog extends Animal {
    @Override
    void sound() { System.out.println("Bark"); }
}

// Настоящий полиморфизм
Animal a = new Dog();
a.sound(); // Выведет "Bark"

// Фиктивный полиморфизм (перегрузка)
class Printer {
    void print(int i) { System.out.println(i); }
    void print(String s) { System.out.println(s); }
}