【c#】什么是抽象类、抽象方法

文章目录

      • 一:什么是抽象类、抽象方法
      • 二:抽象类的特性
        • 1:抽象类不能实例化
        • 2:抽象类可以包含抽象方法和抽象访问器
        • 3:不能用 sealed 关键字修饰抽象类
        • 4:从抽象类派生的非抽象类,必须包括继承的所有抽象方法和抽象访问器的实现
      • 三:抽象方法的特性
      • 四:抽象方法与抽象类之间的关系
      • 五:抽象类与一般类的相同点及不同点

先看一句话
C#允许把类和方法声明为abstract,即抽象类和抽象方法。
抽象类通常代表一个抽象的概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的。所以在一个继承关系形成的等级结构中,树叶节点应当为具体类,而树枝节点均应当为抽象类。–摘自《大话设计模式》

这是比较官方的说法,下面用我自己的语言来描述下

一:什么是抽象类、抽象方法

在 C# 中,使用关键字 abstract 来定义抽象类和抽象方法。

二:抽象类的特性

抽象类是一种特殊的基础类,并不与具体的事物联系。它有以下特性

1:抽象类不能实例化

验证如下:

public abstract class Car
{

}

在这里插入图片描述

2:抽象类可以包含抽象方法和抽象访问器

验证代码如下:

//抽象方法
public abstract void Run();
//抽象访问器
public abstract string Name { get; }

3:不能用 sealed 关键字修饰抽象类

通常情况下,我们会把抽象类视为公共基类,如果使用了sealed 修饰符,这意味着抽象类将不能被继承
验证如下:
在这里插入图片描述

4:从抽象类派生的非抽象类,必须包括继承的所有抽象方法和抽象访问器的实现

验证如下:
【c#】什么是抽象类、抽象方法_第1张图片

三:抽象方法的特性

一个抽象方法通俗易懂的说就是一个没有方法体的方法。它有以下特性
1):抽象方法是隐式的虚方法。
2):只允许在抽象类使用抽象方法声明。
3):因为抽象方法声明不提供实际的实现,所有没有方法体。方法声明只是以一个分号结束,并且在签名后没有大括号,实现由一个重写方法提供,此重写方法是非抽象类的成员。
4):在抽象方法声明中使用static或virtual修饰符是错误的。
5):除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
6):在静态属性上使用abstract修饰符是错误的。
7):在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

下面两种抽象方法的写法都是可以的

//抽象方法
public abstract void Run();
abstract public void Stop();

只不过将 abstract 放到访问修饰符前面时会提示你“修饰符声明顺序不一致”,但这样写也没错,只不过我喜欢第一种写法,看着舒服。
另外,抽象方法不能设置为私有的(因为抽象方法写出来就是为了子类继承实现的)
验证如下
在这里插入图片描述

四:抽象方法与抽象类之间的关系

有抽象方法的类必然是抽象类,
但是,抽象类中的方法并不一定都是抽象方法。

五:抽象类与一般类的相同点及不同点

相同点:
都可以继承其它的类或者接口,也可以派生子类,并且都有具体的方法;
不同点:
抽象类中有抽象方法,一般类中没有;
抽象类不可以实例化,一般类却可以;

当然,概念毕竟只是概念,只能让我们简单的认识抽象类及抽象方法,拿例子分析会更好点,所以这里我补充了一篇 C# 抽象类的简单实现 的博客,希望可以帮到你


结束语

如果这篇博客有幸帮到了您,欢迎点击下方链接,和更多志同道合的伙伴一起交流,一起进步。

Web开发者俱乐部

你可能感兴趣的:(C#,C#)