以C#为例,简述抽象类与接口的区别
区别一:
抽象类能够被继承,子类和抽象类是IS A的关系;而接口不能被真正的继承,接口只能实现。实现了接口的类和接口是CAN DO的关系。
例如:public abstract class Animal{}
Public class Tiger:Animal{} -------这是继承抽象类!可以理解为Tiger is a Animal
Public interface IAdd{}
Public class Calculate:IAdd{}---------这是实现接口!可以理 解为Calculate can do Add
区别二:
抽象类可以有抽象方法、具体方法,甚至还可以有虚方法;而接口不需要编写任何方法,只需要定义方法的返回类型和参数。
例如:public abstract class Animal{ //抽象类
Public void Eat(){} //抽象类的具体方法
Public abstract void Voice(); //抽象类的抽象方法
}
Public interface IManageStudent{
Public bool Remove(int id); //在接口里面只能声明方法的参数、属性
}
区别三:
一个类可以实现多个接口,但是一个类只能继承一个抽象类
例如: Public interface IAdd{}
Public interface ISub{}
Public class Calculate:IAdd,ISub{}
//Calculate类可以实现两个接口
Public abstract class Cat{}
Public abstract class Robots{}
Public class RobotCat:Cat,Robot{}
//编译无法通过,VS错误提示:
总结:抽象类和接口各有优缺点,也有共性(例如二者都不能实例化)所以在使用时应该视具体情况而定;
我的总结是:一般在几个类都有相同的方法时,可以考虑将这几个方法组合成一个抽象类;一般情况下想上层调用与下层代码实现分离的话,可以使用接口。