接口(Interface) and 抽象类(Abstract Class)
这个题是C#开发面试题必问的一道经典题目,接下来谈一谈我自己的理解
1.接口(Interface)就像是一个本书的目录,一眼就能看出这本书有哪些章节,规定好这本书要阐述的大概内容,而具体内容要到各个章节分别去看,并且如果你要出版这本书就必须把每个章节的内容都写完,当然你也可以选择删除某些章节的目录
特点:
a.接口中只能包含方法声明,只能通过子类继承之后重写后使用
b.子类继承接口之后,需要实现所有接口中未实现的方法。
b.接口不能被实例化,接口中不能包含常量,字段,构造函数,析构函数,静态成员
d.接口支持多继承,回调
e.接口可以作用于值类型和引用类型
2.抽象类(Abstract Class)就像是一个模型,不管你要做什么都要先套用(Inhert)这个模型(基类),这个模型的具体结构使用的时候再具体实现,当然也可以有具体实现的部分结构,举个例子:如果你有一个火车的抽象类,那这个抽象类里面可以有车头,车厢,发动机等部件(属性),当你要造一辆货运火车的时候,可能抽象类里原本定义的模型车厢是客运火车的,那么需要重新设计(override)成货车车厢模型,火车头一样那就直接可以使用。
特点:
a.抽象类中声明的抽象方法,不包含实现,可以看作虚方法,也可以存在已实现的方法,如果该方法声明为virtual,则可以选择在子类中重写(override)该方法或不重写
b.抽象类不能被实例化,只是把抽象类的指针指向子类,从而实例化子类,且该子类可以使用抽象类中的构造函数
c.子类继承抽象类,就必须实现其父类中的所有抽象方法
d.抽象类不支持多继承,回调
e.抽象类只能作用于引用类型