Если у меня есть проект, содержащий аналогичные классы, d некоторые могут использовать ту же реализацию, но в большинстве случаев они реализуют свой собственный способ обработки методов, определенных в интерфейсе или абстрактном классе. Я пытаюсь понять, лучше ли интерфейс / абстрактный класс. Я не понимаю, что такое интерфейс, если вы можете просто использовать абстрактный класс с виртуальными абстрактными методами.
Вот интерфейс:
public interface IAthlete
{
void Run();
}
Вот абстрактный класс:
public abstract class Athlete
{
public abstract void Run();
}
Вот реализация интерфейса :
public class Sprinter : IAthlete
{
public void Run()
{
Console.WriteLine("Running Fast....");
}
}
Вот расширение абстрактного класса:
public class MarathonRunner : Athlete
{
public override void Run()
{
Console.Write("Jogging....");
}
}
Теперь, если я решу добавить метод под названием Stop либо к интерфейсу, либо к абстрактному методу, Sprinter и MarathonRunner сломаются, и поскольку я могу предоставить некоторую реализацию по умолчанию для абстрактного, это кажется лучшим выбором. Я что-то упустил?