当前位置:   article > 正文

知识回顾:抽象类与抽象方法_user' 为 abstract;无法实例化

user' 为 abstract;无法实例化

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

//声明抽象类User
abstract class User 
{
	//声明抽象方法Login,所有继承User类的子类都必须重写Login()方法
	protected abstract void Login(); 
}
//声明Emplyee类,继承自User类
class Emplyee:User
{
	protected override vod Login()
	{
		//more code
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

  1. 接口
    接口是指对协定进行定义的引用类型,其他类型实现接口以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似接口可以包含方法、属性、索引器和事件作为成员。以下是接口的定义:
  • 接口是为了实现多态;
  • 接口只能包含方法、属性、事件、索引;
  • 接口成员不能有任何实现;
  • 接口不能被实例化;
  • 接口成员不能有访问修饰符,默认为public;
  • 实现接口的子类必须实现接口所有成员函数;
  • 子类实现接口方法时不需要任何关键字,直接实现即可。
  1. 抽象类
    在面向对象过程中所有的对象都是类描绘的,类里面的数据不足以把具体的对象描绘出来,这样的类就是抽象类,下面是抽象类的定义:
  • 抽象方法只能出现在抽象类中,但是抽象类中可以包含普通方法;
  • 抽象类不能实例化;
  • 抽象类与抽象方法需要添加abstract关键字;
  • 子类实现父类的抽象方法时需添加override关键字;
  • 如果抽象类的子类不是抽象类,那么子类中必须重写父类抽象类的所有抽象方法。
  1. 抽象类和接口异同

  • 不能实例化、包含未实现的方法声明、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员。

  • 接口可以多继承,抽象类不能实现多继承、接口只能定义抽象规则,抽象类既能定义抽象规则也能提供已实现的成员、接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念、接口支持回调,抽象类不能实现回调、接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法、接口可以作用于值类型和引用类型,抽象类只能作用于引用类型、抽象类主要用于关系密切的对象,而接口则是适合为不相关的类提供通用功能、接口着重于Can-Do关系类型,抽象类则偏重于IS-A式关系、接口定义对象的行为,抽象类定义对象的属性、如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类、接口对应的是面向对象编程思想的重要原则:面向接口编程。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/67626
推荐阅读
相关标签
  

闽ICP备14008679号