Sobes.tech
Junior
176
questionbank

Что такое полиморфизм в программировании?

Answer from AI

sobes.tech AI

Полиморфизм — это способность объектов разных классов реагировать на один и тот же вызов метода по-разному. Это достигается путем использования наследования, абстрактных классов и интерфейсов. В C# полиморфизм явлен через переопределение (overriding) методов базового класса в производных классах и перегрузку (overloading) методов.

Примеры полиморфизма:

  1. Переопределение методов (Runtime Polymorphism): Производный класс предоставляет собственную реализацию метода, объявленную в базовом классе. Для этого в базовом классе используется ключевое слово virtual, а в производном — override.

    // Базовый класс
    class Shape
    {
        // Виртуальный метод, который может быть переопределен
        public virtual void Draw()
        {
            // Реализация по умолчанию
        }
    }
    
    // Производный класс 1
    class Circle : Shape
    {
        // Переопределение метода Draw
        public override void Draw()
        {
            // Реализация для круга
        }
    }
    
    // Производный класс 2
    class Square : Shape
    {
        // Переопределение метода Draw
        public override void Draw()
        {
            // Реализация для квадрата
        }
    }
    

    В этом случае можно создать список объектов Shape и вызвать метод Draw для каждого из них, и будет вызвана конкретная реализация для каждого типа фигуры.

  2. Перегрузка методов (Compile-time Polymorphism): Несколько методов с одним и тем же именем, но с разными сигнатурами (количество или типы параметров) в одном классе.

    class Calculator
    {
        // Перегруженный метод Add (для int)
        public int Add(int x, int y)
        {
            return x + y;
        }
    
        // Перегруженный метод Add (для double)
        public double Add(double x, double y)
        {
            return x + y;
        }
    }
    

Полиморфизм способствует созданию более гибкого, расширяемого и легко поддерживаемого кода. Он позволяет писать обобщенный код, который может работать с объектами разных типов.