Sobes.tech
Junior

Czym jest polimorfizm w programowaniu?

sobes.tech AI

Odpowiedź od AI

Polimorfizm to zdolność obiektów różnych klas do reagowania na ten sam wywołanie metody w różny sposób. Osiąga się to poprzez użycie dziedziczenia, klas abstrakcyjnych i interfejsów. W C# polimorfizm objawia się przez nadpisywanie (overriding) metod klasy bazowej w klasach pochodnych oraz przez przeciążanie (overloading) metod.

Przykłady polimorfizmu:

  1. Nadpisywanie metod (Polimorfizm w czasie wykonywania): Klasa pochodna dostarcza własną implementację metody zadeklarowanej w klasie bazowej. W tym celu w klasie bazowej używa się słowa kluczowego virtual, a w klasie pochodnej override.

    // Klasa bazowa
    class Shape
    {
        // Wirtualna metoda, którą można nadpisać
        public virtual void Draw()
        {
            // Domyślna implementacja
        }
    }
    
    // Klasa pochodna 1
    class Circle : Shape
    {
        // Nadpisanie metody Draw
        public override void Draw()
        {
            // Implementacja dla koła
        }
    }
    
    // Klasa pochodna 2
    class Square : Shape
    {
        // Nadpisanie metody Draw
        public override void Draw()
        {
            // Implementacja dla kwadratu
        }
    }
    

    W tym przypadku można utworzyć listę obiektów Shape i wywołać metodę Draw dla każdego z nich, a zostanie wywołana konkretna implementacja dla każdego typu figury.

  2. Przeciążanie metod (Polimorfizm w czasie kompilacji): Kilka metod o tej samej nazwie, ale z różnymi sygnaturami (liczba lub typy parametrów) w jednej klasie.

    class Calculator
    {
        // Przeciążona metoda Add (dla int)
        public int Add(int x, int y)
        {
            return x + y;
        }
    
        // Przeciążona metoda Add (dla double)
        public double Add(double x, double y)
        {
            return x + y;
        }
    }
    

Polimorfizm sprzyja tworzeniu bardziej elastycznego, rozszerzalnego i łatwego w utrzymaniu kodu. Pozwala pisać kod ogólny, który może działać z obiektami różnych typów.