什么时候使用抽象类和接口?

抽象类 :本类固有的属性和行为(共享抽象类核心属性和行为时)
接口: 扩展功能的时候 (当类共享外围行为时,就会使用接口)

举个例子
飞行员是抽象类
f16飞行员 具体类
安全员 接口
所以在写f16飞行员类的时候,你需要写关于飞行员的公共类的时候你用抽象类,当你需要写关于f16飞行员本类不属于共有的属性特性的时候(共有的如都需要训练,都有一个隶属的单位如美国空军,不是共有的安全员,麦霸)用接口。

再举个栗子
继承 is a 是基本功能
接口 like a 是额外功能

比如某个机构培训的学员,学员都有学习工功能(基本功能),抽烟则是额外功能(有些学员是不抽烟的)
所以你写学员这个类的时候,你可以继承公共的类中的学习方法,你如果想继承抽烟那你用接口(抽烟不是基本功能)

stack overFlow上的解释
How about an analogy: when I was in the Air Force, I went to pilot training and became a USAF (US Air Force) pilot. At that point I wasn’t qualified to fly anything, and had to attend aircraft type training. Once I qualified, I was a pilot (Abstract class) and a C-141 pilot (concrete class). At one of my assignments, I was given an additional duty: Safety Officer. Now I was still a pilot and a C-141 pilot, but I also performed Safety Officer duties (I implemented ISafetyOfficer, so to speak). A pilot wasn’t required to be a safety officer, other people could have done it as well.

All USAF pilots have to follow certain Air Force-wide regulations, and all C-141 (or F-16, or T-38) pilots ‘are’ USAF pilots. Anyone can be a safety officer. So, to summarize:

Pilot: abstract class
C-141 Pilot: concrete class
ISafety Officer: interface
added note: this was meant to be an analogy to help explain the concept, not a coding recommendation. See the various comments below, the discussion is interesting.

比方说,当我在空军服役时,我参加了飞行员训练,后来成为美国空军(美国空军)飞行员。那时我没有资格飞任何东西,必须参加飞机类型的训练。一旦我合格,我就成了飞行员(抽象类)和c-141飞行员(具体的班级)。在我的一次作业中,我被赋予了额外的职责:安全官员。现在我仍然是一名飞行员和c-141飞行员,但我也执行了安全官员职责(可以说是我执行了isaf机长)。飞行员不需要成为一名安全官员,其他人也可以这样做。
所有美国空军飞行员都必须遵守某些空军的规定,所有的c-141(或f16,或t-38)飞行员都是美国空军飞行员。任何人都可以成为安全官员。所以,总结一下:
飞行员:抽象类
c - 141飞行员:具体类
ISafety官员:接口
补充说明:这是一个比喻来帮助解释概念,而不是编码建议。参见下面的各种评论,讨论很有趣。

Android什么时候用抽象类什么时候用接口相关推荐

  1. java请编写公共类继承抽象类_(Java相关)怎么理解抽象类,继承和接口?

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:海子 来源:博客园 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的 ...

  2. android 7.1 上wifi 热点 上的接口变化

    android 7.1 上wifi 热点 上的接口变化 在android 7.1 之前 设置wifi ap方法如下: WifiManager mWifiManager = (WifiManager)m ...

  3. python 抽象类、抽象方法、接口、依赖注入、SOLIP

    python 抽象类.抽象方法.接口.依赖注入.SOLIP 1.程序设计原则:SOLIP SOLIP设计原则 1.单一责任原则(SRP) 一个对象对只应该为一个元素负责 2.开放封闭原则(OCP) 对 ...

  4. php抽象类继承抽象类,PHP抽象类和抽象方法以及接口

    PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下: 抽象类: 1.如果一个类中有一个方法是抽象方法,则这个类就是抽象类 ...

  5. 25、Java面向对象——抽象类和抽象方法、接口

    目录 课前先导 一.抽象方法 1.定义 2.语法格式 3.抽象方法与普通方法的区别 二.抽象类 1.定义 2.语法格式 3. 抽象类和普通类的区别 4.为什么使用抽象类 三.代码演示 1.创建抽象类 ...

  6. Java练习题——抽象类、方法以及接口

    抽象类.方法以及接口练习 一.前言 二.题目 三.题目分析 1.画图 2.接口 3.抽象方法 4.继承关系 5.重写方法 四.代码实现 1.父类 2.接口 3.青蛙 4.小狗 5.兔子 6.测试类 五 ...

  7. Java复习五:抽象类+模板设计方法+接口+三种工厂模式

    抽象类 类的设计应该保证父类和子类能够共享特征.有时将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类叫做抽象类 abstract可以修饰类.抽象类 ​ 抽象类不可以实例化 ​ 抽象类中一定有 ...

  8. 抽象类和选择性实现接口

    转载请注明出处:抽象类和选择性实现接口_自己选择实现接口_Mr_Leixiansheng的博客-CSDN博客 1.抽象类和接口的区别 抽象类里面可以有非抽象的方法(可以没有抽象方法),接口里只能有抽象 ...

  9. 接口(1):抽象类和抽象方法、接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 这种机制在编程语言中并不通用.例如,C++对这些概念只有间接的支持.在java中存在语言关键字这个事实表明人们认为这些思想是很重要的, ...

最新文章

  1. WinCE的C#编程,对float型进行四舍五入保留两位小数,小数进行四舍五入操作,Math.Round的应用案例。...
  2. 大推荐——家庭书架·成功读库系列
  3. java程序设计B_Java程序设计11——GUI设计与事件处理B
  4. html视频资源加载出错处理,如何处理前端异常
  5. Redis基础1(定义及基础)
  6. 荣耀:目前还在观望鸿蒙,未来的对手是苹果
  7. 写给自己,梳理一下我现在对前端知识结构的理解
  8. JAVA程序设计基础(第六版)第六章习题 6.13
  9. 舵机的基本了解以及数字舵机和模拟舵机的区别
  10. MacBook Pro 触摸板手势突然失效的解决方案
  11. 云计算概念简述(讲解)
  12. nuxt整合vue-pdf插件和使用createLoadingTask方法进行分页
  13. 好好说话之Use After Free
  14. vac服务器未响应,csgo国服游戏停止工作、未响应的解决方法
  15. Qt游戏开发-深海危机
  16. foxmail如何导出邮件
  17. java 从已知日期计算干支纪日_干支纪日在线换算(干支纪日从何时开始)
  18. 牛市跟熊市是什么意思股市熊市是什么意思
  19. HTTP.sys远程代码执行漏洞
  20. Blender渲染崩溃原因汇总,如何解决渲染崩溃情况?

热门文章

  1. Docker实践(二)镜像
  2. ARCore-Unity3d教程3 - Unity Demo发布
  3. php 位运算 负数,php的位运算详解
  4. 带有页脚聚合的WPF数据网格
  5. Android Tensorflow Lite最佳做法和优化
  6. 依赖反转原理,IoC容器和依赖注入:第4部分
  7. 使用C#将DataTable导出到文件
  8. 如何处理“转换数据类型错误”错误?
  9. Infer.NET——为热爱概率的人准备的库
  10. matlab外部调用lingo,讲讲官方的例子,MATLAB调用Lingo