抽象类和接口的区别

来源:互联网 发布:xmanager mac版 编辑:程序博客网 时间:2024/05/17 01:51
抽象类和接口在面向对象中是很不容易分清的两个概念,这两个概念也是在应聘的笔试和面试中较容易出现的。
抽象类列举一个类所需要的行为,但是不明确提供每个行为的具体实现方法。他比具体类更接近抽象模型,具体的实现由抽象类的派生类来完成。在C#语言中定义一个抽象类可以使用abstract关键字。如下
public abstract class Student
{
}
接口和抽象类一样也是只提供行为,不提供具体的实现。但接口和抽象类还有很大的不同,下面会说到。在C#语言中使用interface关键字来实现一个接口。如下
public interface IStudent
{
}
接口的名字应该在最前面加上大写的I
两者的区别:
1、对于接口我们只是定义抽象的行为,而抽象类会指定具体的一些属性。
2、接口中所有的方法都必须是“虚”的,都需要在派生类中实现,而在抽象类中除了虚的方法还可以由具体的方法。
3、当我们从一个抽象类派生出一个非抽象类时,派生类通过重载的方式来具体实现抽象类中的抽象方法。所以在派生类的方法头中会由override关键字。当我们的一个类实现一个接口时,该类要提供接口中定义的所有方法的具体实现,然而和抽象类不一样,实现类并不重载他们,也就是不用使用override关键字。
4、一个类继承一个抽象类不一定要重载抽象类中所有的抽象方法。但如果抽象类中的一个或多个抽象方法没有重载,则该派生类仍然是一个抽象类。实现一个接口的类必须提供接口中所有抽象方法的具体实现。
5、一个类只能继承一个抽象类但却可以实现多个接口。
 
原创粉丝点击