Читайте также:
|
|
Полиморфи́зм — возможность объектов с одинаковой спецификацией иметь различную реализацию.
Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования.
Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода.
Простым примером полиморфизма может послужить руль автомобиля. Концепцию полиморфизма часто выражают такой фразой: "один интерфейс — много методов". Это означает, что для выполнения группы подобных действий можно разработать общий интерфейс. Полиморфизм позволяет понизить степень сложности программы, предоставляя программисту возможность использовать один и тот же интерфейс для задания общего класса действий. Конкретное (нужное в том или ином случае) действие (метод) выбирается компилятором. Программисту нет необходимости делать это вручную. Его задача — правильно использовать общий интерфейс.
В основе полиморфизма, характерного для семейства классов, лежат три механизма:
• одностороннее присваивание объектов внутри семейства классов; сущность, базовым классом которой является класс предка, можно связать с объектом любого из потомков. Другими словами, для введенной нами последовательности объектов xk присваивание xi = xj допустимо для всех j >=i;
• переопределение потомком метода, наследованного от родителя. Благодаря переопределению, в семействе классов существует совокупность полиморфных методов с одним именем и сигнатурой;
• динамическое связывание, позволяющее в момент выполнения вызывать метод, который принадлежит целевому объекту.
Способы реализации: перегрузка методов и операций, виртуальные методы.
public class Worker: Man
{
//Виртуальный метод
public virtual void GiveMoney(int money)
{
Console.WriteLine("Получите "+money+" рублей");
}
}
public class Teacher: Worker
{
//Задаем необходимую функциональность
public override void GiveMoney(int money)
{
int bonus = 1000; //премиальные 1000 руб
money = money + bonus;
base.GiveMoney(money);
}
}
Вот простой пример, иллюстрирующий перегрузку методов:
public void ovlDemo() {}
// Перегружаем метод ovlDemo() для одного целочисленного параметра
public void ovlDemo(int a) { Console.WriteLine("Один параметр: " + a); }
Перегруз операций:
public class ComplexNumber
{
private int real;
private int imaginary;
public ComplexNumber(): this(0, 0) // constructor
{
}
public ComplexNumber(int r, int i) // constructor
{
real = r;
imaginary = i;
}
// Override ToString() to display a complex number in the traditional format:
public override string ToString()
{
return(System.String.Format("{0} + {1}i", real, imaginary));
}
// Overloading '+' operator:
public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary);
}
// Overloading '-' operator:
public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary);
}
}
Дата добавления: 2014-12-18; просмотров: 198 | Поможем написать вашу работу | Нарушение авторских прав |