2026-08-01
CSharp编程
0

目录

一、抽象类是什么?
二、通俗解释
三、代码示例
四、什么时候用抽象类?
五、抽象类 vs 接口
六、一句话总结

一、抽象类是什么?

想象你要设计一个**“动物”**的模板,但“动物”本身不是一个具体的生物,比如你不能直接说“我养了一只动物”。
但你知道所有动物都有一些共同的行为(比如呼吸、移动),而具体行为因动物不同而不同(比如鱼游、鸟飞)。
抽象类就是用来定义这种“通用模板”的工具,它规定了子类必须实现的功能,同时自己可以包含一些默认实现。


二、通俗解释

  1. 抽象类像“蓝图”

    • 比如手机的“设计图纸”,图纸本身不能打电话,但规定了手机必须有的功能(打电话、充电)。

    • 具体手机(比如iPhone、华为)继承这个图纸,自己实现具体细节。

  2. 不能被直接使用

    • 就像你不能直接住进“房子的设计图”,必须根据图纸盖出具体的房子。
  3. 强制子类遵守规则

    • 比如抽象类规定“所有动物必须会移动”,子类(鱼、鸟)必须实现如何移动,否则编译报错。

三、代码示例

csharp
// 抽象类:动物 public abstract class Animal { // 抽象方法:子类必须实现“如何移动” public abstract void Move(); // 普通方法:所有动物共享的“呼吸”功能 public void Breathe() { Console.WriteLine("动物在呼吸..."); } } // 具体类:鱼 public class Fish : Animal { public override void Move() { Console.WriteLine("鱼在游泳!"); } } // 具体类:鸟 public class Bird : Animal { public override void Move() { Console.WriteLine("鸟在飞翔!"); } }

使用:

csharp
Animal fish = new Fish(); fish.Breathe(); // 输出:动物在呼吸... fish.Move(); // 输出:鱼在游泳! Animal bird = new Bird(); bird.Breathe(); // 输出:动物在呼吸... bird.Move(); // 输出:鸟在飞翔!

四、什么时候用抽象类?

  1. 需要共享代码

    • 多个子类有共同的方法(比如Breathe()),避免重复写代码。
  2. 强制子类实现特定功能

    • 比如所有动物必须定义自己的Move()方法。
  3. 介于“完全通用”和“完全定制”之间

    • 比普通类更严格,但比接口更灵活(接口不能包含具体实现)。

五、抽象类 vs 接口

  • 抽象类
    • 可以有方法的具体实现。
    • 更适合“是什么”(比如动物是一个基类)。
  • 接口
    • 只能定义方法签名。
    • 更适合“能做什么”(比如会飞、会游泳)。

六、一句话总结

抽象类是“半成品模板”:它定义了一部分功能,剩下的让子类去填空,确保所有子类都符合你的设计规则!

本文作者:ZeroEngineer

本文链接:

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