一、抽象类核心概念
使用 abstract 关键字修饰的类,叫做抽象类。
抽象类最大特点:不能实例化(不能 new)
抽象类存在的唯一意义:被子类继承,实现多态
二、抽象类内部可以包含的成员
抽象类是"混合类",可以同时拥有四种成员:
-
普通属性
-
普通方法(有方法体)
-
抽象属性(无实现)
-
抽象方法(无方法体)
代码展示
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筑血肉