抽象类和封装类

95 阅读2分钟
  1. C#允许把类和函数声明为abstract,抽象方法只能在抽象类里面
  2. 抽象类不能实例化,因为是不完整的模板
  3. 抽象类可以包含普通函数和抽象函数,抽象函数就是只有函数定义没有函数体。显然,抽象函数本身也是虚拟的Virtual(只有函数定义,没有函数体实现)。
  4. 类是一个模板,那么抽象类就是一个不完整的模板,我们不能使用不完整的模板去构造对象(new)
  5. 抽象类可以包括非抽象方法,而接口只能包括抽象方法

抽象类

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();
        }
    }
}

总结

抽象类不能构造,但可以用来声明,抽象类声明,子类构造,调用被实现的抽象方法,就是调用了子类的实现抽象类里的抽象方法的方法

密封类和密封方法

  1. C#允许把类和方法声明为sealed。
  2. 对于类,这表示不能继承该类;
  3. 对于方法表示不能重写该方法。

密封类

sealed class Base 
{

}

Base不能被继承,否则会报错

密封方法

class Base
{
    public virtual void Move()
    {

    }

}
class Child:Base
{
    public sealed override void Move()
    {
        Console.WriteLine("不能继续重写了");
    }
}

密封方法只能用在已经重写过的函数里,表示不能继续重写了

为什么使用密封类和密封方法

  1. 防止重写某些类导致代码混乱
  2. 商业原因