Головна‎ > ‎C#‎ > ‎Класи‎ > ‎Поліморфізм‎ > ‎

Приклад для співбесіди

Просто наслідування (без поліморфізму)
У всіх нащадків класу Animal одна і та ж реалізація методу getSound()

class Animal {
     public void getSound() {
          Console.WriteLine("Абстрактний звук");
     }
}

class Dog : Animal {
}

class Cat : Animal {
}

class Cow : Animal {
}


-----------------------------

Animal[] animals = new Animal[3];

Dog dog = new Dog();
Cat cat = new Cat();
Cow cow = new Cow();

animals[0] = dog;
animals[1] = cat;
animals[2] = cow;

foreach (var x in animals) {
     x.getSound();
}

Console.ReadLine();

Абстрактний звук
Абстрактний звук
Абстрактний звук



Наслідування (з поліморфізмом)
Додаємо специфікатори virtual та override і отримуємо різну реалізацію методу getSound() 
у нащадків класу Animal


class Animal {
           // virtual - поліморфний інтерфейс, який можна перевизначити в нащадках
     public virtual void getSound() {   
          Console.WriteLine("Абстрактний звук");
     }
}

class Dog : Animal {
     public override void getSound()
     {
          Console.WriteLine("Woof");
     }
}

class Cat : Animal
{
     public override void getSound()
     {
          Console.WriteLine("Meow");
     }
}

class Cow : Animal
{
     public override void getSound()
     {
          Console.WriteLine("Moo");
     }
}


-----------------------------

Animal[] animals = new Animal[3];

Dog dog = new Dog();
Cat cat = new Cat();
Cow cow = new Cow();

animals[0] = dog;
animals[1] = cat;
animals[2] = cow;

foreach (var x in animals) {
     x.getSound();
}

Console.ReadLine();

Woof
Meow
Moo

Ми звертаємося до кожного звіра узагальнено, не знаючи до якого конкретно звіра з масиву ми звернулися, але завдяки поліморфізму кожен об'єкт поводить себе так, як ми перевизначили його метод. 

Ми перекриваємо стару реалізацію методу - новою.



Приведення до базового типу 

Cow cow = new Cow();
Animal animal = cow;      // Upcasting

      // Ми тепер не знаємо, який конкретний екземляр зберігається в animal
     // а нам і не треба знати, у цьому вся сіль (весь смак)

animal.getSound();

Му- му