前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >知识回顾:抽象类与抽象方法

知识回顾:抽象类与抽象方法

作者头像
喵叔
发布2021-12-29 08:06:03
3190
发布2021-12-29 08:06:03
举报
文章被收录于专栏:喵叔's 专栏

今天说一个老生常谈的知识:抽象类与抽象方法。这两个内容在面试中经常被问到,对于老程序员来说会打起来没什么难度,但是对于新手程序员来说就有些难多了,那么这篇文章就来讲解一下抽象类和抽象方法。 C#允许把类和方法声明为抽象类与抽象方法,声明方法是在类名或方法名前加上 abstract 关键字。定义很简单,但是你有没有想过什么时候应该用抽象类呢?要回答这个问题只需记住一点:如果类设计的目点是用来被其它类继承,并且它代表的是一系列类对象所具有的公共属性或方法,那么这个类应该设置为抽象类。 下面我们再来看另一个问题:抽象类与普通类有什么区别。首先抽象类不能够被实例化。如果类中包含有抽象方法,那么这个类必须要声明为抽象类。同时抽象方法必须在子类中重写。例如我们要声明一个用户类User,这个类里定义了公用的方法,然后有其它类来继承它并实现自己的方法,那么这个用户类应该声明为抽象类。因为User是一个名词不代表具体的对象,只是代表所有用户所拥有的共同特征,因此User类不可能被实例化。同时如果所有用户都必须声明Login方法的话,那么可以在User类中声明一个抽象方法Login,让所有继承自User的类都去重写Login方法。案例代码如下:

代码语言:javascript
复制
//声明抽象类User
abstract class User 
{
	//声明抽象方法Login,所有继承User类的子类都必须重写Login()方法
	protected abstract void Login(); 
}
//声明Emplyee类,继承自User类
class Emplyee:User
{
	protected override vod Login()
	{
		//more code
	}
}

抽象类和接口好多人会弄混,下面我们就来看看接口和抽象类的区别。

  1. 接口 接口是指对协定进行定义的引用类型,其他类型实现接口以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似接口可以包含方法、属性、索引器和事件作为成员。以下是接口的定义:
  • 接口是为了实现多态;
  • 接口只能包含方法、属性、事件、索引;
  • 接口成员不能有任何实现;
  • 接口不能被实例化;
  • 接口成员不能有访问修饰符,默认为public;
  • 实现接口的子类必须实现接口所有成员函数;
  • 子类实现接口方法时不需要任何关键字,直接实现即可。
  1. 抽象类 在面向对象过程中所有的对象都是类描绘的,类里面的数据不足以把具体的对象描绘出来,这样的类就是抽象类,下面是抽象类的定义:
  • 抽象方法只能出现在抽象类中,但是抽象类中可以包含普通方法;
  • 抽象类不能实例化;
  • 抽象类与抽象方法需要添加abstract关键字;
  • 子类实现父类的抽象方法时需添加override关键字;
  • 如果抽象类的子类不是抽象类,那么子类中必须重写父类抽象类的所有抽象方法。
  1. 抽象类和接口异同
  • 同 不能实例化、包含未实现的方法声明、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员。
  • 异 接口可以多继承,抽象类不能实现多继承、接口只能定义抽象规则,抽象类既能定义抽象规则也能提供已实现的成员、接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念、接口支持回调,抽象类不能实现回调、接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法、接口可以作用于值类型和引用类型,抽象类只能作用于引用类型、抽象类主要用于关系密切的对象,而接口则是适合为不相关的类提供通用功能、接口着重于Can-Do关系类型,抽象类则偏重于IS-A式关系、接口定义对象的行为,抽象类定义对象的属性、如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类、接口对应的是面向对象编程思想的重要原则:面向接口编程。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档