2024-03-25 · C# 基础 · 学习笔记

抽象类 abstract class

抽象类 abstract class 是不能实例化的基类,它可以包含已实现的方法和抽象方法(只有签名没有实现)。子类必须实现所有抽象方法。

抽象类和接口的区别:抽象类是"是什么"的关系(Dog is an Animal),接口是"能做什么"的能力(Flyable、Swimable)。一个类只能继承一个抽象类,但能实现多个接口。

实践体会:如果多个类有共同的代码,抽一个抽象基类把公共方法提上去,避免重复。如果只是定义能力契约,用接口。

代码示例

// 抽象基类
public abstract class Animal
{
    // 已实现的方法
    public void Eat() => Console.WriteLine("吃东西");

    // 抽象方法:子类必须实现
    public abstract string Sound();

    // 虚方法:子类可以重写
    public virtual string Describe() => "我是一只动物";
}

// 具体子类
public class Dog : Animal
{
    public override string Sound() => "汪汪汪";

    public override string Describe() => "我是一只狗";
}

public class Cat : Animal
{
    public override string Sound() => "喵喵喵";
}

// 使用
Animal dog = new Dog();
dog.Eat();            // 吃东西(继承的)
Console.WriteLine(dog.Sound());   // 汪汪汪
Console.WriteLine(dog.Describe());// 我是一只狗
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。