abstract
关键字定义,不能被实例化,通常包含普通方法(有实现)和抽象方法(无实现)。interface
关键字定义,默认所有方法都是 public
且没有实现(C# 8.0 及以上支持默认实现)。csharp// 抽象类
abstract class Animal
{
public abstract void MakeSound(); // 抽象方法
public void Sleep() // 具体方法
{
Console.WriteLine("Sleeping...");
}
}
// 接口
interface IAnimal
{
void MakeSound(); // 只能定义方法签名(C# 8.0 之前)
}
特性 | 抽象类 | 接口 |
---|---|---|
字段 | 允许 | 不允许 |
构造函数 | 允许 | 不允许(不能被实例化) |
普通方法 | 允许 | 不允许(C# 8.0+ 允许默认实现) |
抽象方法 | 允许(不分抽象 | 只允许方法签名(完全抽象) |
访问修饰符 | 允许 public/protected/private | 所有车成员默认 public |
继承方式 | 单继承 | 多继承 |
抽象类:
Sleep()
)。Animal
类。接口:
IFlyable
可以应用于 Bird
和 Airplane
。IDisposable
、IComparable
。如果类之间是 “是一种”(is-a)关系,如 Dog : Animal
,用抽象类;
如果类之间是 “能做什么”(can-do)关系,如 Bird : IFlyable
,用接口。
本文作者:xuxuxuJS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!