抽象类&接口一页纸速记(面试随身背诵)
一、核心区别
- 继承
抽象类:单继承class A:AbsClass
接口:多实现class A:IA,IB,IC - 成员
抽象类:字段、构造函数、private/protected、普通方法+抽象方法
接口:无实例字段、无构造;C#7.3只有抽象方法;C#8+支持默认实现 - 关系
抽象类:is-a(是一类)
接口:can-do(拥有能力)
二、优缺点
抽象类
✅优点:复用字段、复用公共代码、封装、构造统一初始化
❌缺点:单继承受限、耦合高
接口
✅优点:多实现、低耦合、适配DI、单元Mock、插件化
❌缺点:不能共享字段;C#7.3新增抽象方法全实现类需改代码
三、选型口诀
共有属性、公用代码、父子关系→抽象类
契约规范、多能力、解耦分层→接口
项目最佳:接口定规范,抽象抽公用,实体继承抽象
四、经典业务设计(支付举例)
IPayment接口:统一Pay、查单签名契约BasePay:IPayment抽象类:封装通用签名、生成订单- WeChatPay/AliPay:继承BasePay,重写Pay独有逻辑
五、高频考点
- 抽象类、接口都不能直接new实例
- 接口成员默认public,不能写访问修饰符
- 任何C#版本接口不能定义实例字段
- C#8接口默认实现:新增方法不用修改原有实现类
六、面试简答万能模板
从继承、成员、设计关系三点区分;共用数据代码用抽象,契约扩展解耦用接口,实际项目接口+抽象组合开发。
