接口和抽象类的使用动机不同,从而决定是使用接口还是使用抽象类,使用抽象类是为了代码的复用,使用接口是为了实现多态,当不确定使用接口还是使用抽象类时,就从使用目的出发决定,提高代码复用性就是用抽象类,想实现多态就是用接口。

使用抽象类的场景
1. 抽离重复代码
2. 实现多态
使用接口类的场景
1. 实现类可以扩展功能,也可以选择不扩展功能
2. 是规范入参和出参类型
3. 实现多态

如果某些类都可以有功能方法或属性,那就把这些功能方法封装为抽象类。
如果某些类满足场景的变化,各个类可选择添加功能方法或不添加功能方法,那就把这些功能方法封装为接口。

使用抽象类还是接口:

  1. 如果要设计的方法是场景中某个类型“与生俱来、一脉相承”的(无论以后场景如何变化,该方法都肯定会存在于类型当中),那么这样的抽象方法就应该设计到“抽象类”当中。
  2. 如果要设计的方法并不是场景中某个类型的根本,而是为了满足场景变化的丰富度选择性添加或不添加的,那么这样的抽象方法就应该设计到“接口”当中。
  3. 设计“接口”的时候,请注意⚠️要满足“接口隔离原则”。不要把可能会分离的方法放到一个大接口当中了,这样的话会造成让实现类拥有了不该有的方法(我们把这种情况叫做:接口污染)。

接口和抽象类是为业务场景服务的。
有这么一个场景,要设计生物的特性。
首先我们要搞清楚,生物有哪些,特性有哪些。
生物有:狗,猫,猪,小麦,大豆。
特性有:吃,呼吸,懒惰,看门。
把这些特性针对与生物进行抽离,共同点封装为抽象类,异同点封装为接口。
显然呼吸的特性是这些生物共有的,呼吸的方法实现逻辑都可以满足生物呼吸的需求,这时就没有必要封装接口,让各个生物重写呼吸方法逻辑,这样反而增加冗余代码。
那我们就可以把呼吸方法逻辑封装为生存抽象类。提供默认呼吸实现,生物共享呼吸的方法逻辑。

如果要实现吃饭的功能,应该封装为吃饭接口,让狗,猫,猪实现各自的吃饭方法逻辑,而小麦,大豆不需要实现吃饭接口。
如果生物只有狗,猫,猪,并且都是用嘴实现吃饭,那么吃饭方法就可以封装为吃饭抽象类

如果为生物添加懒惰的行为,首先懒惰行为并不是生物一定要有的,所以这里把懒惰封装为懒惰接口,让猪去实现,狗和猫选择性是否要实现。
同理看门也不是这些生物的共同功能,所以也应该封装为看门接口

因此我们在设计代码,使用接口还是抽象类时。
前提要确定两点:一是需要为哪些类提供接口或抽象,二是这些类的特性有哪些。
从而抽离共同逻辑代码封装为抽象类。
差异点封装为接口方法,让各自的类去重写这些差异功能。

接口和抽象类使用场景相关推荐

  1. 接口和抽象类应用场景及比较

    原文链接:https://blog.csdn.net/Sun_flower77/article/details/78019957 1.接口特性  2. 抽象类和接口的区别以及使用场景  3. 为什么要 ...

  2. 接口和抽象类应用场景

    转载自:https://cloud.tencent.com/developer/article/1677833 一. 对接口的三个疑问 很多初学者都大概清楚interface是什么, 我们可以定义1个 ...

  3. C# 接口和抽象类的区别和使用场景

    C# 中的接口和抽象类都是面向对象编程中常见的概念,它们都可以用于定义一组方法和属性,但是它们之间有很多的区别和使用场景. 接口和抽象类都可以被继承,接口和抽象类中的方法和属性都可以被继承和实现.但是 ...

  4. 接口和抽象类区别以及应用场景

    1.接口和抽象类区别: (1)实现:抽象类的子类使用 extends 来继承:接口必须使用 implements 来实现接口. (2)构造函数:抽象类可以有构造函数:接口不能有. (3)实现数量:类可 ...

  5. 【学习Day5】接口和抽象类的区别、作用和使用场景

    目录 一.接口和抽象类的区别? 二.接口和抽象类的作用? 三.接口和抽象类的使用场景? 一.接口和抽象类的区别? 抽象类用abstract 来修饰 接口用interface修饰 抽象类中有构造器 接口 ...

  6. 接口和抽象类的区别与使用场景

    前言: 前几天面试的是面试官问了一个问题 接口和抽象类了解吧? 说一下 他们的分别用在什么场景下(就是让说一下我该如何选择使用接口还是抽象类) 我回答的不忍直视. 我事后问了一个同学,你给我来了一句那 ...

  7. [drp 6]接口和抽象类的区别,及其应用场景

    导读:在很多时候,接口和抽象类可以替换.发现这个问题,还是之前学习设计模式的时候,看到那个UML图发现的.那么,究竟在什么时候使用接口,什么时候使用抽象类呢?现在结合这个项目,做一个总结. 一.接口 ...

  8. java 匿名类 实现接口_细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】...

    1.前言 匿名内部类是什么东西? 没有名字的内部类就是匿名内部类. 什么场景使用? 匿名内部类适合创建那种只需要一次使用的类. 这是个很有用的东西,可想而知,如果不使用匿名内部类,哪些只需要使用一次的 ...

  9. Java 接口和抽象类可以被new么?

    背景: 最近有同事跟我说了他面试时遇到的问题,考官问:"接口和抽象类可以被new嘛?".这可能不是考官的原话,但是据他表达考官大概就是这个意思了.听到这个问题,我的第一反应是肯定不 ...

最新文章

  1. CentOS7下vsftp配置
  2. 【建站系列教程】5、谈一谈网站的静态化
  3. 如何告别半途而废——韦东山嵌入式Linux视频学习笔记00
  4. mysql一对一修改_MYSQL的一对一
  5. Opencv3编程入门学习笔记(三)之访问图像像素的三种方法
  6. Web开发者一定会用的5个google浏览器插件
  7. php举例--array,php中session的应用举例-php中array_key_exists与isset的区别...-php取整数的几种方式(实例)_169IT.COM...
  8. memset()函数及其作用
  9. k8s traefik 映射外部服务,映射其他域名,映射内网其他服务
  10. 神鹰实验室质量管理系统
  11. C语言pthread.h运用
  12. 亿图图示-----思维导图MindMaster示例
  13. 新时达服务器说明书_新时达电梯主板操作服务器使用手册操作说明书使用说明...
  14. (附源码)php积极心理学交流网站 毕业设计 100623
  15. 按下Backspace键,就会跳转到上一个页面。JavaScript屏蔽Backspace键处理,禁用Backspace键。
  16. 刷B站学数分Day1|如何写出一份合格的数据分析师简历
  17. 2017暴雪php,动视暴雪2017Q4财报 开启全新里程碑
  18. 好玩免费的api接口
  19. 程序猿麒麟臂打造之路(健身二)
  20. MySQL 密码设置

热门文章

  1. 苹果手机数据转移到新手机_旧手机数据转移到新手机,一键免费传输
  2. 全国农村调查数据(1986-2015年)
  3. 【人工智能】人工智能是中国2025的歧路;人工智能只是智能制造舞台上的“小配角”
  4. ROS 解决pr2_motor_diagnostic_tool/plugin.xml缺失报错
  5. 两维天线阵列波束成型原理Python代码
  6. vue中字典值存在多个进行反写
  7. 工厂用计算机自动控制技术,一种基于计算机技术的工厂车间灯光控制系统的制作方法...
  8. 气室内温度控制系统介绍
  9. 波士顿大学数学与计算机科学,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...
  10. git tag 和 branch 的区别以及使用场景