接口和抽象类在很多方面都比较相似,本文来比较它们的相似及不同之处,搞清楚它们应该在哪些情况下使用。
接口和抽象类的相似之处
1、它们都包含可以由派生类继承的成员
2、它们都不可以直接实例化(虽然不能实例化,但我们可以声明它们的变量)
接口和抽象类的不同之处
1、派生类只能继承一个抽象类;但可以使用多个接口
2、抽象类可以拥有抽象成员(没有方法体,方法的实现必须在派生类中完成,否则派生类本身也必须是抽象的)和非抽象成员(有方法体,但也可以定义成虚函数virtual以便在派生类中重写override);接口成员没有方法的实现,只能在使用接口的类上实现
3、抽象类的成员可以是私有的、受保护的、内部的;接口的成员是公共的(因为接口的目的就是供外部使用)
4、接口不能包含构造函数、析构函数、静态成员或变量
使用场合
抽象类主要用于对象系列的基类,这些对象都拥有某些特性;接口则主要用于类,这些类存在根本性的区别,但是仍然可以完成某些相同的任务。
已有 3472 位网友参与,快来吐槽:
发表评论