Можете объяснить различия между настоящим и фиктивным полиморфизмом в программировании?
Answer from AI
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); }
}