C# 之 抽象类与接口
来源:互联网 发布:自然语言处理分类算法 编辑:程序博客网 时间:2024/05/16 16:22
抽象类
C#允许把类和方法声明为abstract,即抽象类和抽象方法。抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的对象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象类。抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。
注意:1.抽象类不能实例化;2.抽象方法是必须被子类重写的方法;3.如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。
接口
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。所以接口不能实例化,不能有构造方法和字段;不能有修饰符,比如public、private等;不能声明虚拟的或静态的等。还有实现接口的类就必须要实现接口中的所有方法和属性。
接口用interface声明,而不是class,接口名称前要加‘I',接口中的方法或属性前面不能有修饰符、方法没有方法体。抽象类与接口的区别:
类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。
如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类
从设计角度讲,抽象类是从子类中发现公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确认,预先定义。
派生类只能继承一个基类,即只能够直接继承一个抽象类(但是可以用一个继承链包含多个抽象类)。相反,类可以使用任意多个接口,但这不会产生太大的区别——这两种情况取得的效果是类似的,只是采用接口的方式略有不同。
抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)用非抽象成员(它们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写)。另一方面,接口成员必须都在使用接口的类上实现——它们没有代码体。另外,按照定义,接口成员是公共的(因为它们倾向于在外部使用),但抽象类的成员可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外,接口不能包含字段、构造函数、析构函数、静态成员或常量。
抽象类主要用作对象系列的基类,共享某些主要特性,例如,共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。
抽象类可以给出一些成员的实现,接口却不包含成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类智能继承一个抽象类,但可实现多个接口等等。
13 0
- C# 之 抽象类与接口
- 接口与抽象类 c#
- c#抽象类与接口
- c#之抽象类, 接口
- C#之抽象类与接口的区别
- C#中抽象类与接口的区别之处
- C#中抽象类与接口的区别之处
- C#中抽象类与接口的区别之处
- C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别
- C# 中的接口与抽象类
- C#抽象类与接口的比较
- C#抽象类与接口的比较
- C#接口与抽象类的区别
- C#抽象类与接口的比较
- C#抽象类与接口的区别
- C#抽象类与接口的异同
- C#接口与抽象类区别实例
- 关于C#的抽象类与接口
- RelativeLayout与LinearLayout的比较
- 转]Java中HashMap遍历的两种方式
- Python机器学习——线性模型
- Myeclipse SVN错误:Error validating server certificate for https//
- OpenGL 练习11.3 Lighting
- C# 之 抽象类与接口
- Javascript & HTML5 使用Ajax自动更新页面数据
- oracle 数据库开发面试题
- struts2之单个文件上传
- Android--相机预览及拍照临时文件/SurfaceView
- [delphi技术] 关于sharemem造成dll错误的处理办法
- const,static 实例程序
- eclipse整合github
- 线程基础知识