程序设计中的抽象类与接口
一、导入语:
抽象类和接口都是进行面向对象设计时专用的设计结构,在实际进行项目设计时,经常需要考虑的问题就是使用抽象类还是接口?下面通过对于抽象类和接口进行简单的比较,了解两者之间的区别和联系,从而在实际设计时使用恰当的结构。
二、相关概念
1、抽象类:声明方法的存在而不去实现它的类被叫做抽像类(abstract class)或含有一个或多个抽象方法的类称为抽象类且不能实例化。
2、接口:是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。
三、抽象类与接口的异同
1、类是对对象的抽象,抽象类则是对类的抽象.而接口只是一个行为的规范或规定。
2、一个类一次可以实现若干个接口,但是只能扩展一个父类(继承一个父类)。
3、如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口方法。
4、接口和抽象类都不能实例化,都包含未实现的方法声明,派生类必须实现未实现的方法,一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的基类抽象方法,而接口则只能对其所有成员进行方法签名(方法、其他成员)。
5、抽象类用abstract class声明,接口用interface声明,接口名称前要加‘I’,接口中的方法或属性前面不能有修饰符、方法没有方法体。
interface IInterface
{
void Method1();//只能声明方法签名
}
abstract class MyAbs:IInterface //抽象类还可继承于接口
{
public abstract void AbMethod1();//抽象方法
public void Method1() //非抽象方法
{
Console.WriteLine("MethodimplementedfromtheIInterface");
}
}
class MyClass:MyAbs
{
public override void AbMethod1() //继承后,必须实现抽象方法
{
Console.WriteLine("Abstarct method #1");
}
}
class MyClient
{
public static void Main()
{
MyClass mc=new MyClass();
mc.Method1();
}
}
四、抽象类与接口的用法
1、什么时候使用抽象类或接口?
当设计中为了规范类中方法声明的结构(即类的行为)时,使用抽象类或接口。也就是强制子类对外部提供统一的方法声明时,使用抽象类或接口。
2、什么时候使用抽象类?
当满足以下的条件时,最好使用抽象类进行设计:
a)子类不继承其它父类
b)子类中存在完全相同的功能实现的方法
c)子类中存在相同的属性
d)设计出的结构需要继承其它类
当需要满足d条件时,只能使用抽象类,否则也可以考虑使用接口实现。
3、什么时候使用接口?
当满足以下的条件时,最好使用接口进行设计:
a)子类已经继承了其它父类
b)子类中不存在完全相同的功能实现方法
c)子类中不存在相同的属性
d)设计出的结构不需要继承其它类
当需要满足a条件时,只能使用接口,否则也可以考虑使用抽象类实现。
4、抽象类和接口的其它用途
a)禁止创建该类的对象时,可以把该类声明为抽象类。
b)当需要存储大量的常量数据,而这些常量数据将会在项目中的多个类之间使用时,可以使用接口。
c)当需要统一具有某种功能的类的对象时,可以使用接口。