接口与抽象类差异区别
简单理解:
抽象类:是个不完整的类,可以包含定义和实现,需要提供子类重写实现。
接口:是为了满足外部调用而定义的一种规范约定。只有定义,没有实现。
接口 | 抽象类 |
---|---|
在接口中仅能定义成员,但不能有具体的实现。 | 抽象类除了抽象成员以外,其他成员允许有具体的实现。 |
在接口中不能声明字段,并且不能声明任何私有成员,成员不能包含任何修饰符。 | 在抽象类中能声明任意成员,并能使用任何修饰符来修饰。 |
接口能使用类或者结构体来继承。 | 抽象类仅能使用类继承。 |
在使用类来实现接口时,必须隐式或显式地实现接口中的所有成员,否则需要将实现类定义为抽象类,并将接口中未实现的成员以抽象的方式实现。 | 在使用类来继承抽象 类时允许实现全部或部分成员,但仅实现其中的部分成员,其实现类必须也定义为抽象类。 |
一个接口允许继承多个接口。 | 一个类只能有一个父类。 |
用interface定义 | 用abstract定义 |
实现接口的类必须实现所有成员 | 非抽象派生类必须实现抽象方法 |
直接实现 | 需要用Oerride实现抽象方法 |
相似点
不能被实例化 |
包含未实现的方法 |
派生类必须实现未实现的方法 |