C# 抽象类(abstract)

一、抽象类核心概念

使用 abstract 关键字修饰的类,叫做抽象类。

抽象类最大特点:不能实例化(不能 new)

抽象类存在的唯一意义:被子类继承,实现多态

二、抽象类内部可以包含的成员

抽象类是"混合类",可以同时拥有四种成员:

  1. 普通属性

  2. 普通方法(有方法体)

  3. 抽象属性(无实现)

  4. 抽象方法(无方法体)

代码展示

复制代码
abstract class People
{
    // 1.普通属性
    public int Age { get; set; }

    // 2.普通方法(有方法体)
    public void F2()  
    { 
        Console.WriteLine("F2非抽象方法");
    }

    // 3.抽象属性(无实现)
    public abstract string Name { get; set; } 

    // 4.抽象方法(没有方法体,不能写{})
    public abstract void F1(); 
}

三、抽象方法 VS 普通方法(必考区别)

对比项 抽象方法 abstract 普通方法
所在类 只能在抽象类中 普通类、抽象类都可以
方法体 没有方法体,直接分号结束 必须有方法体 {}
作用 定义规范、定义功能,交给子类实现 自己已经实现功能
子类要求 必须 override 重写 可继承、可重写、可不用

四、子类继承抽象类的强制规则(必考)

如果子类是普通类(非抽象类)

必须:实现/重写抽象类中所有的抽象方法、抽象属性

如果子类也是抽象类

可以不实现,继续交给下一级子类实现

子类实现代码

复制代码
class Student : People
{
    // 重写抽象属性
    public override string Name { get; set; } = "ssss";

    // 重写抽象方法
    public override void F1()
    {
        Console.WriteLine("子类的F1");
    }
}

五、抽象类核心规则汇总(背诵版)

  • abstract 修饰的类 = 抽象类

  • 抽象类不能实例化(不能 new)

  • 抽象类专门用来被继承

  • 抽象方法无方法体,只能存在于抽象类中

  • 普通子类必须重写全部抽象成员

  • 抽象类可以包含普通成员 + 抽象成员

  • 抽象类可以继承另一个抽象类

六、考试简答题满分模板

1. 抽象类的特点?

抽象类使用abstract修饰,无法实例化,主要用于被子类继承。抽象类中可以包含普通属性、普通方法以及抽象属性和抽象方法;抽象方法没有方法体,普通子类继承抽象类时,必须重写所有抽象成员。

2. 抽象方法和普通方法的区别?

抽象方法只能定义在抽象类中,没有方法体,用于定义功能规范,必须由子类重写实现;普通方法可以定义在普通类和抽象类中,拥有完整方法体,自身已经实现功能,子类可直接使用或选择性重写。

七、终极口诀

抽象类不能new,专为继承来服务

普通成员直接用,抽象成员子类补

抽象方法无体壳,子类override筑血肉

相关推荐
玖玥拾9 分钟前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾29 分钟前
Rust 学习目录
开发语言·学习·rust
我命由我123451 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑1 小时前
Sentinel安装
java·后端·微服务
云泽8081 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
灯澜忆梦1 小时前
GO---可见性规则
开发语言·golang
逝水无殇1 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
这是个栗子2 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
凤凰院凶涛QAQ2 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
研☆香3 小时前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript