接口和抽象类只是虚拟抽象方法是一回事吗?

Xai*_*oft 9 c# oop abstract-class interface

如果我有一个包含类似类的项目,有些可能使用相同的实现,但在大多数情况下,它们实现了自己的方法来处理接口或抽象类中定义的方法.我试图弄清楚接口/抽象类是否更好.如果你可以使用虚拟抽象方法的抽象类,我不明白接口的意义.

这是一个界面:

public interface IAthlete
{
    void Run();
}
Run Code Online (Sandbox Code Playgroud)

这是一个抽象类:

public abstract class Athlete
{
    public abstract void Run();
}
Run Code Online (Sandbox Code Playgroud)

这是接口的实现:

public class Sprinter : IAthlete
{
    public void Run()
    {
        Console.WriteLine("Running Fast....");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是抽象类的扩展:

public class MarathonRunner : Athlete
{
    public override void Run()
    {
         Console.Write("Jogging....");
    }
 }
Run Code Online (Sandbox Code Playgroud)

现在,如果我决定向接口或抽象方法添加一个名为Stop的方法,Sprinter和MarathonRunner都会中断,因为我可以提供一些默认的抽象实现,这似乎是一个更好的选择.我错过了什么吗?

riv*_*aet 6

接口和抽象超类之间有两个主要区别:

抽象类

  • 通过使用抽象超类可以实现代码重用
  • 你只能继承一个超类

接口

  • 每个方法都必须在每个子类中实现
  • 一个类可以继承多个接口(多重继承)

  • @Xaisoft - 是的,派生类需要覆盖所有抽象方法.将抽象类视为接口功能的超集,而无需使用多重继承. (2认同)