想象你要设计一个**“动物”**的模板,但“动物”本身不是一个具体的生物,比如你不能直接说“我养了一只动物”。
但你知道所有动物都有一些共同的行为(比如呼吸、移动),而具体行为因动物不同而不同(比如鱼游、鸟飞)。
抽象类就是用来定义这种“通用模板”的工具,它规定了子类必须实现的功能,同时自己可以包含一些默认实现。
抽象类像“蓝图”
比如手机的“设计图纸”,图纸本身不能打电话,但规定了手机必须有的功能(打电话、充电)。
具体手机(比如iPhone、华为)继承这个图纸,自己实现具体细节。
不能被直接使用
强制子类遵守规则
如何移动,否则编译报错。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(); // 输出:鸟在飞翔!
需要共享代码
Breathe()),避免重复写代码。强制子类实现特定功能
Move()方法。介于“完全通用”和“完全定制”之间
抽象类是“半成品模板”:它定义了一部分功能,剩下的让子类去填空,确保所有子类都符合你的设计规则!
本文作者:ZeroEngineer
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!