- C#允许把类和函数声明为abstract,抽象方法只能在抽象类里面
- 抽象类不能实例化,因为是不完整的模板
- 抽象类可以包含普通函数和抽象函数,抽象函数就是只有函数定义没有函数体。显然,抽象函数本身也是虚拟的Virtual(只有函数定义,没有函数体实现)。
- 类是一个模板,那么抽象类就是一个不完整的模板,我们不能使用不完整的模板去构造对象(new)
- 抽象类可以包括非抽象方法,而接口只能包括抽象方法
抽象类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _09_抽象类
{
abstract class Enemy
{
private int hp;
private int speed;
public void Move()
{
Console.WriteLine("Move");
}
public abstract void Attrack();
}
}
继承抽象类的Boss类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _09_抽象类
{
internal class Boss : Enemy
{
public override void Attrack()
{
Console.WriteLine("Boss进行攻击");
}
}
}
测试
namespace _09_抽象类
{
internal class Program
{
static void Main(string[] args)
{
Enemy e = new Boss();
e.Attrack();
}
}
}
总结
抽象类不能构造,但可以用来声明,抽象类声明,子类构造,调用被实现的抽象方法,就是调用了子类的实现抽象类里的抽象方法的方法
密封类和密封方法
- C#允许把类和方法声明为sealed。
- 对于类,这表示不能继承该类;
- 对于方法表示不能重写该方法。
密封类
sealed class Base
{
}
Base不能被继承,否则会报错
密封方法
class Base
{
public virtual void Move()
{
}
}
class Child:Base
{
public sealed override void Move()
{
Console.WriteLine("不能继续重写了");
}
}
密封方法只能用在已经重写过的函数里,表示不能继续重写了
为什么使用密封类和密封方法
- 防止重写某些类导致代码混乱
- 商业原因