以C#为例,简述抽象类与接口的区别

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错误提示:

总结:抽象类和接口各有优缺点,也有共性(例如二者都不能实例化)所以在使用时应该视具体情况而定;

我的总结是:一般在几个类都有相同的方法时,可以考虑将这几个方法组合成一个抽象类;一般情况下想上层调用与下层代码实现分离的话,可以使用接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值