0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C#:abstract interface

Posted at

何为抽象类?
在面向对象的概念中,所有的对象都可以用类来表示,但是并不是所有的类都有具体的对象可以对其实例化,所以这样的类就叫做抽象类。例如Animal类,说new Animal();实例一个动物,但是一个动物长什么样?不知道,动物就是一个抽象类,不能描述一个具体的对象与之对应。
C#允许把类和方法声明为abstract,即抽象类和抽象方法。抽象类应该拥有尽可能的共同的代码,拥有尽可能少的数据。

abstract class Animal     //加abstract关键字,表明是抽象类
   {
       protected abstract string getShoutSound();
       //在方法的返回值前加abstract表明此方法是抽象方法,抽象方法没有方法体,直接在括号后加“;”
       
   }

C#中抽象的特点
1、抽象类不能被实例化
2、抽象方法是必须被子类重写的方法
3、如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含一般方法。
抽象类是提供一个抽象的概念,他提供一个继承的出发点,新的抽象类的建立,一定是用来继承的。在一个以继承关系形成的等级结构里面,树叶节点就是具体类,而树枝节均为抽象类。(这个相当在一棵树上,树叶继承树枝)
具体的内容请见下图:

何为接口?
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所特定的所有属性和成员。声明接口在语法上于与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。

interface IChange
   {
       string ChangeThing(string thing);
       //声明一个Ichangething接口,此接口有一个方法Changthing,参数是一个字符串变量,返回一字符串。
   }

举个例子:抽象类——人;具体类——男人,女人;超人继承男人的所有方法和属性,但是超人有一个特殊技能:飞!如何实现?这个时候就用到的是接口。

抽象VS接口
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
概念上的比较
第一:类是对对象的抽象,抽象类是对类的抽象;接口是对行为的抽象。
第二:如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。
第三:从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口根本不知道子类的存在,方法实现还不能确认,预先定义。
这些内容都是从书本上提出的具体概念,有些其他的内容,其实更重要的是有我们自己的认识。
理解两者不同之处
1、接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
2、接口可以多继承,抽象类不行
3、接口定义方法,不能实现,而抽象类可以实现部分方法。
4、接口中基本数据类型为static 而抽类象不是的。

【总结】
当我们关注一个事物的本质的时候,用抽象类;关注一个操作的时候,用接口。抽象类的功能要远超过接口,但是定义抽象类的代价高,每个类只能继承一个类,在这个抽象类中必须写出其所有子类的所有共性。虽然接口的功能上会弱化很多,但是它只是针对一个动作的描述,而且我们可以在一个类中同时实现多个接口。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?