• 接口与抽象类的相同与不同


    个人理解如下(活到老,学到老,不同编程阶段不同场景下都有新的体会)
    代码示例及抽象场景稍后提供

    相同点

    1.都是对相同的行为或者属性的抽象。

    举例1:

    中国人,外国人,其他种族的人,动物,物品,房子等,都有名字,所以抽象一个Name的属性出来。这是属性的抽象

    举例2:

    人,动物,其他生物,车子,飞机都有移动的特征,所以抽象一个Move的方法出来,这是行为的抽象

    2.都不能被实例化。

    很多情况下,接口和抽象类都可以相互替换。但是如下情况下,最好分开来用:

    不同点

    1.一个类可以实现多个接口,但是只能继承一个抽象类。这个是C#单继承特性决定的。

    如果一个类,想实现多个抽象属性或者方法的功能,而这些抽象属性或者方法又分布在不同的抽象类里面,那么这些抽象类最好设计为接口

    2.抽象类具有继承性和约束性,接口只具有约束性。

    抽象类是对相同事务的抽象,接口更多的是多不同事务的一个接口的约束。

    举例1:

    人和动物都有名字,都可以Move,但是把人继承动物,多少有些别扭,虽然最后代码可以跑。

    举例2:

    不同的电气,都接220V的电源,设计相同的三角插座,是一种对所有不同事务的接口抽象,最后的效果就是,只要是用电的工具,都具有相同的插头,表现出不同的工作方式

    3.抽象类可以约束子类的构造函数,而接口不可以

    4.抽象类可以包含不抽象的东西,而接口不可以

    例如抽象类可以包含虚方法,让子类来重写,子类也可以不重写,接口做不到这一点。
    不如某一个流程,有10个工厂实现方式都一致,最后第11个工厂实现方式不一样,这时候可以使用抽象方法,为前面10个工厂提供默认实现,第11个工厂重写去实现自己的方式

  • 相关阅读:
    降低Redis内存使用和提升性能的一些方案
    spring框架源码十四、源码剖析注意事项及容器初始化主体流程
    C语言王国——深入自定义类型(联合体、枚举)
    Juniper交换机收集日志
    数据库——理论基础
    使用Barrier共享鼠标键盘,通过macos控制ubuntu系统
    MyBatis学习笔记(2022-11-30)
    Kubernetes集群中部署服务思路
    计算机的基本分类
    ffmpeg云服务器推流
  • 原文地址:https://blog.csdn.net/lishuangquan1987/article/details/126555776