2023-04-01
编程语言
00

目录

1. 定义方式
示例(C#):
2. 成员类型
3. 继承方式
示例(C#):
4. 适用场景
5. 总结

1. 定义方式

  • 抽象类:使用 abstract 关键字定义,不能被实例化,通常包含普通方法(有实现)和抽象方法(无实现)。
  • 接口:使用 interface 关键字定义,默认所有方法都是 public 且没有实现(C# 8.0 及以上支持默认实现)。

示例(C#):

csharp
// 抽象类 abstract class Animal { public abstract void MakeSound(); // 抽象方法 public void Sleep() // 具体方法 { Console.WriteLine("Sleeping..."); } } // 接口 interface IAnimal { void MakeSound(); // 只能定义方法签名(C# 8.0 之前) }

2. 成员类型

特性抽象类接口
字段允许不允许(C# 8.0+ 允许 static 字段)
构造函数允许不允许
普通方法允许不允许(C# 8.0+ 允许默认实现)
抽象方法允许只允许方法签名
访问修饰符允许 public/protected/private默认 public

3. 继承方式

  • 抽象类只能单继承,即一个类只能继承一个抽象类。
  • 接口可以多实现,即一个类可以同时实现多个接口。

示例(C#):

csharp
abstract class Animal // 抽象类 { public abstract void MakeSound(); } interface IFlyable // 接口 { void Fly(); } class Bird : Animal, IFlyable // 继承抽象类,同时实现接口 { public override void MakeSound() { Console.WriteLine("Chirp Chirp"); } public void Fly() { Console.WriteLine("Flying..."); } }

4. 适用场景

  • 抽象类

    • 适用于有共享代码的情况,允许部分实现(如 Sleep())。
    • 适合定义一类对象的基本行为,比如 Animal 类。
  • 接口

    • 适用于不同类之间的功能扩展,如 IFlyable 可以应用于 BirdAirplane
    • 适合定义行为能力,比如 IDisposableIComparable

5. 总结

区别点抽象类接口
继承只能单继承支持多实现
成员允许字段、构造函数、普通方法只能有方法签名(C# 8.0+ 允许默认实现)
适用场景适合同类对象的基本实现适合无关对象的行为规范

如果类之间是 “是一种”(is-a)关系,如 Dog : Animal,用抽象类
如果类之间是 “能做什么”(can-do)关系,如 Bird : IFlyable,用接口

本文作者:xuxuxuJS

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!