在 C# 编程语言中,定义一个抽象类的步骤是什么?抽象类与接口在实现和用途上有哪些关键区别?
考察说明
考查对 C# 面向对象编程中抽象类定义及其与接口区别的理解。
回答思路
- 【回答框架 1】定义抽象类需使用 abstract 关键字,可包含抽象方法(无实现)和具体方法,抽象方法没有方法体。抽象类不能被实例化,只能被继承,派生类必须实现所有抽象成员。
- 【回答框架 2】接口是定义一组方法签名、属性、事件或索引器的类型,不提供任何实现。接口不能包含字段,抽象类可以。接口支持多实现,一个类可实现多个接口,但只能继承一个抽象类。
- 【回答框架 3】设计区别:抽象类用于有关联的类族,提供公共基类代码;接口用于定义行为契约,适合不相关类型实现相同功能。C# 8+ 接口可提供默认实现,但一般不作为主要设计。
- 【关键点 1】抽象类用 abstract 声明,接口用 interface 声明。
- 【关键点 2】抽象类可有字段和具体方法,接口不能有字段。
- 【关键点 3】抽象类单继承,接口可多实现。
- 【关键点 4】抽象类表达 is-a,接口表达 can-do。