C#抽象类 & 接口 面试 3 道笔试题(含标准答案,面试高频)

抽象类&接口 面试3道笔试题(含标准答案,面试高频)

题目1(基础简答)

简述接口和抽象类区别,项目怎么选用?
参考答案:

  1. 继承:抽象类单继承;接口多实现。
  2. 成员:抽象类有字段、构造、任意访问修饰符、实体方法;接口无实例字段,C#8前只有抽象签名,C#8可写默认实现。
  3. 关系:抽象is-a,接口can-do。
    选用:共用字段、重复代码、父子继承用抽象类;定义契约、多能力扩展、解耦DI用接口;工程常用:接口定义约束+抽象类封装公共代码

题目2(场景题)

做支付系统:微信支付、支付宝、银联支付,三者都有签名验签、生成订单公共逻辑,各自支付发起逻辑不同。如何设计?
参考答案:

  1. 定义 IPayment 接口,约束统一行为:Pay()、QueryOrder();
  2. 新建抽象类 BasePayment : IPayment,封装公共:签名、验签、生成订单;
  3. 微信/支付宝/银联类继承抽象类,只重写各自Pay实现。

思路:接口定标准,抽象抽公用,具体类实现差异化。

题目3(易错选择题+解析)

下列说法错误的是()
A. 抽象类不能实例化
B. 接口中成员默认public,不能手动指定访问修饰符
C. 一个类可以同时继承抽象类并实现多个接口
D. C#7.3接口可以定义实例字段
答案:D
解析:
无论哪个C#版本,接口都不能定义实例字段;抽象类才可以定义成员字段。

附加面试小追问(随口问答)

问:C#8接口默认实现解决了什么痛点?
答:旧接口新增抽象方法,全部实现类要改代码;默认实现可以给新方法写默认逻辑,原有实现类无需改动。

posted @ 2026-06-04 07:29  人生就是修炼  阅读(11)  评论(0)    收藏  举报