前言:
在实际开发中,我们通常不理解抽象类与接口的区别,而且这个问题也是经常被面试官问到的一个问题.下面我从三个方面讲解一下它们的区别.
讲义:
抽象类特点:
抽象类不能被实例化,所以其中的函数用static来修饰.
抽象类可以包含抽象方法,这是其它类所不能的!抽象方法只能存在于抽象类中,且不包含任何实现,派生类必须覆盖它们.
抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法,也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们.
如果派生类没有实现抽象基类的所有抽象方法,则该派生类必须声明为抽象类.
接口特点:
不能被实例化
抽象中的属性,方法等默认是Public的,在实现它们的类中必须将属性,方法等声明为Public的.
接口可以定义类构造函数,但不能定义实例构造函数.
抽象类与接口区别:
相同点:
都不能被实例化
不同点:
抽象类可以有实现的过程,而接口没有.
接口除了可以包含方法外,还可以包含属性,索引器与事件.
接口实现了系统中的松耦合,抽象类与子类,是父子关系.接口与实现类,是松耦合关系.
一个类只能继承一个抽象类,但可以实现多个接口.
继承类对于两者所涉及的实现不同,继承类对于抽象类中抽象方法的实现,可以不用重写,可以延用抽象类的方法.对于接口,必须要全部实现.
在抽象类中,如果新增加一个方法的话,继承类中可以不作任何处理 ,但对于接口,必须要实现它.
接口不光作用于引用类型,也可以作用于值类型.抽象类只能作用于引用类型.
抽象类的多重继承比较灵活,而接口的多重继承需要借助虚函数.