2023-04-01
编程语言
00

目录

1. 定义方式
示例(C#):
2. 主要区别
3. 适用场景

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+ 允许默认实现)
抽象方法允许(不分抽象只允许方法签名(完全抽象)
访问修饰符允许 public/protected/private所有车成员默认 public
继承方式单继承多继承

3. 适用场景

  • 抽象类

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

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

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

本文作者:xuxuxuJS

本文链接:

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