60 lines
1.4 KiB
C#
60 lines
1.4 KiB
C#
using System;
|
|
|
|
/*
|
|
* Полиморфизм
|
|
*
|
|
* виртуальные методы
|
|
*
|
|
* virtual
|
|
*
|
|
* override
|
|
*/
|
|
/// <summary>
|
|
/// virtual и override - дают возможность переопределить работу методов в классе наследнике
|
|
/// </summary>
|
|
class Motor
|
|
{
|
|
/// <summary>
|
|
/// Чтобы метод был доступен на уровно наследника вместо private ставим protected
|
|
/// </summary>
|
|
protected virtual void StartEngine()
|
|
=> Console.WriteLine("Двигатель запущен!");
|
|
|
|
/// <summary>
|
|
/// Чтобы переопределить метод для новой реализации в наследнике
|
|
/// </summary>
|
|
public virtual void Drive()
|
|
{
|
|
StartEngine();
|
|
Console.WriteLine("Я еду!");
|
|
}
|
|
}
|
|
|
|
class SportMotor : Motor
|
|
{
|
|
protected override void StartEngine() => Console.WriteLine("Рон дон дон");
|
|
|
|
/// <summary>
|
|
/// Переопределение виртуального метода
|
|
/// </summary>
|
|
public override void Drive()
|
|
{
|
|
StartEngine();
|
|
Console.WriteLine("Я быстро еду!");
|
|
}
|
|
}
|
|
|
|
class Stable
|
|
{
|
|
public void Drive(Motor motor) => motor.Drive();
|
|
}
|
|
|
|
class Program
|
|
{
|
|
static void Main()
|
|
{
|
|
var stable = new Stable();
|
|
stable.Drive(new SportMotor());
|
|
Console.ReadKey();
|
|
}
|
|
} |