抽象类和接口

抽象类和接口

抽象类和接口都是面向对象中定义规范/契约的机制,强制子类实现某些成员。

抽象类(abstract class)

  • 可以包含实现代码(具体方法)+ 抽象方法(只有声明无实现)
  • 抽象成员必须由派生类 override 实现
  • 不能被实例化(new)
  • 单继承:一个类只能继承一个抽象类
public abstract class Animal
{
    public string Name { get; set; }
    public abstract void Speak();   // 抽象方法
    public void Eat() { Console.WriteLine("Eating..."); }  // 具体方法
}

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

接口(interface)

  • 只包含声明(方法/属性/事件的签名),不含实现(C# 8 后可默认实现)
  • 多实现:一个类可以实现多个接口
  • 表达"能做什么"的能力契约
public interface IFlyable
{
    void Fly();
}

public class Bird : IFlyable
{
    public void Fly() => Console.WriteLine("Flying");
}

选择

  • 需要共享实现代码 → 抽象类
  • 需要多实现、纯契约 → 接口
  • is-a 关系 → 抽象类;can-do 关系 → 接口

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录