C# 类教程-继承:抽象(abstract)

  • C# 类教程-类
  • C# 类教程-类成员:字段(域)、属性、索引
  • C# 类教程-类成员:方法、事件
  • C# 类教程-类成员:运算符重载与索引器
  • C# 类教程-类成员:构造函数和析构函数
  • C# 类教程-类成员:嵌套类型
  • C# 类教程-访问修饰符与可访问性级别
  • C# 类教程-继承
  • C# 类教程-继承:方法重载
  • C# 类教程-继承:隐藏(new)
  • C# 类教程-继承:重写(virtual 与 override)
  • C# 类教程-继承:抽象(abstract)
  • C# 类教程-多态性

我们推荐您阅读同名文章:new、virtual、override、abstract 等-抽象,其总结性更强。

我们在分析问题时,越往上分析,就感觉结构越抽象。比如,我们分析动物的捕猎行为:这几种动物是群力合作,那几种动物是耐心守候,那几种动物是致命一击……他们都有一个方法叫“捕猎”,只是我们无法给他们一个统一的过程。此时我们可以在他们的基类中定义一个抽象方法,该方法什么事也不做,只是占个名字。

public abstract class HuntingAnimal
{
    public abstract void Hunt();
}


public class Tiger : HuntingAnimal
{
    public override void Hunt()
    {
        //...
    }
}

HuntingAnimal 用 abstract 定义了一个抽象方法 Hunt(),由于抽象方法不做什么事情,所以不需要大括号,直接加引号结束即可。在派生类中,用 override 来实现这个抽象方法。

  • 抽象的类不能被实例化,所以不能用 new 来产生实例。
  • 如果方法是抽象的,则类必须是抽象的。
  • 派生类必须实现基类中的所有抽象方法,如果它不能做到,那么它也应该是个抽象类。
  • 抽象类不能是密封的。(关于密封:如果我们不想让一个类被继承,可以使用 sealed 关键字来确保它不会被继承。)

注意,虽然虚方法和抽象方法均是利用 override 关键字来重写,但虚方法和抽象方法是完全不同的。

相关阅读

  • C# 抽象类与接口的应用场景与应用方式区别
  • C# 类教程-类
  • C# 类教程-类成员:字段(域)、属性、索引
  • C# 类教程-类成员:方法、事件
  • C# 类教程-类成员:运算符重载与索引器
  • C# 类教程-类成员:构造函数和析构函数
  • C# 类教程-类成员:嵌套类型
  • C# 类教程-访问修饰符与可访问性级别
  • C# 类教程-继承
  • C# 类教程-继承:方法重载
  • C# 类教程-继承:隐藏(new)
  • C# 类教程-继承:重写(virtual 与 override)
  • C# 类教程-继承:抽象(abstract)
  • C# 类教程-多态性

你可能感兴趣的