您当前的位置: 首页 >  c#

Allen Su

暂无认证

  • 1浏览

    0关注

    431博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【C# 教程系列第 11 篇】什么是抽象类、抽象方法

Allen Su 发布时间:2019-01-21 21:22:33 ,浏览量:1

这是【C# 教程系列第 11 篇】,如果觉得有用的话,欢迎关注专栏。

文章目录
      • 一:什么是抽象类、抽象方法
      • 二:抽象类的特性
        • 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:从抽象类派生的非抽象类,必须包括继承的所有抽象方法和抽象访问器的实现

验证如下: 在这里插入图片描述

三:抽象方法的特性

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

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

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

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

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

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

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

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

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

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。

结束语 技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。 最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。
关注
打赏
1656491068
查看更多评论
立即登录/注册

微信扫码登录

0.0444s