Abstract Class
函数成员没有被完全实现
其子具体类必须实现所有的抽象方法
无方法体的虚方法等价于抽象方法
子抽象类实现与否都行,在子抽象类里可以添加新的抽象方法
抽象方法仅不可为private(因为必须对子类可见),子类实现时必须用override 且 访问权限不可缩小
抽象类不可被实例化,不可被声明,只用于继承
Interface
抽象类的方法全是抽象方法时则可改写为接口
接口内可以拥有成员变量
接口自己的方法也不用abstract修饰
子具体类需要全部实现其抽象方法
子抽象类如果不实现部分抽象方法,则需要在抽象类中声明这些未实现的抽象方法
interface IVehicle { void Run(); void Stop(); } abstract class VehicleBase: IVehicle { public void Run() { //... } public abstract void Stop(); }
引入接口的好处:解耦
接口变量作为参数传入相关类的方法里,而非将类的实例作为相关类的成员(聚合关系)
调用方法时传入实现该接口的类实例即可
用接口代替具体类也可以做