1.对象

对象是个具体的东西,有着明确的属性特征和行为特征。

例如:你手上牵着的女朋友或男朋友就是个具体的对象。

如图中的苏格兰折耳猫,特征是耳朵向下呈折叠状,有着具体的颜色(你看到的颜色),并且和其他猫科动物有着共同的基本特征。

2.类

类是个抽象的东西,有着一些基本属性和行为。

例如:你的对象是某类人(男人、女人等),但具体是哪个就不知道了,因为Ta还没出现(还没实例化)。

以下三个都是同一类猫,统称为苏格兰折耳猫,特征是耳朵向下呈折叠状,会有先天骨科疾病,进而影响运动能力,时常用坐立的姿势来缓解痛苦,但和其他猫科动物有着共同的基本特征。这三个猫都有着相同的属性(折耳,有病等),也有着不同的属性(肤色等),但都是同一类猫,统称为苏格兰折耳猫。

  

类和对象的关系

类是对象的抽象,对象是类的具体实现。

如:我们在工作中获取经验,为了传授经验,前人把经验抽象为理论,再通过理论传授知识给后人,后人获取到知识后需要通过实践来巩固知识。

经验--抽象-->理论,理论--实践-->经验;

对象--抽象-->类, 类--实例化-->对象。

抽象的过程相对于设计,实例化的过程相对于应用。

3.抽象类

抽象类是对类的进一步抽象。其实普通类也可以实现抽象类的功能,但抽象类可以做到强制不能实例化,只能通过继承的方式传递属性和方法,并且需要实现抽象方法。

如:把猫科动物定义为抽象类,不同的某一类猫的名称都不相同,需要继承重写猫类名称(如苏格兰折耳猫类)。

对象、类和抽象类关系图

4.接口

接口是某个事物对外提供的一些功能的说明,是一个规范,类似于硬件上面的接口。

例如:猫和狗都会发出声音(说话),一般把这类功能封装为接口,然后通过实现接口便可以获得该功能。

抽象类和接口

a.抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高;

​b.抽象类可以有具体的方法和属性,  接口只能有抽象方法和常量(接口后来允许有具体方法);

c.抽象类主要用来抽象类别,接口主要用来抽象功能(只能使用常量,一般定义公共固定属性);

d.抽象类实现接口时,接口的方法在抽象类中可以被实现也可以不被实现,而普通实现接口必须实现所有接口方法。

「何时使用抽象类或接口」

当你关注一个事物的「本质」的时候,一般用「抽象类」
当你关注一个事物的「功能」的时候,一般用「接口」

「例子中四者关系图」

最新文章

  1. Azure Queue Storage 基本用法 -- Azure Storage 之 Queue
  2. 在linux使用make编译ArduPilot for Pixhawk/PX4 ArduPilot 编译环境搭建
  3. MySQL 启动时禁用了 InnoDB 引擎的解决方法
  4. Java基础之处理事件——使用动作Action(Sketcher 6 using Action objects)
  5. 教你如何选择Android游戏引擎
  6. Android 快速选择联系人
  7. 如何优化UI布局?
  8. pytest 11 allure2生成html报告
  9. div轮流滚动显示
  10. Linux下docker报错syntax error:unexpected protocol at end of statement
  11. jsp执行过程图解
  12. Java解决异常之try、catch、finally、throw、throws&log4j记录日志步骤
  13. KMeans算法分析以及实现
  14. VS Code 配置 C/C++ 环境(转)
  15. Navicat Premium和Navicat for MySQL哪个好用?
  16. ios 中基本控件的定义
  17. FIR特性及仿真实现_01
  18. 20、uwp打包失败(All app package manifests in a bundle must declare the same values under the XPath *[local-name()='Package']/*[local-name()='Dependencies'])
  19. apache配置防盗链
  20. 为什么样本方差自由度(分母)为n-1

热门文章

  1. malloc() vs new
  2. mysql读写分离(proxySQL) lamp+proxysql+nfs
  3. @PropertySource配置的用法
  4. 【力扣】337. 打家劫舍 III
  5. ANTLR 简介
  6. windows下更换MySql数据库数据文件夹位置
  7. Gitlab更改项目间的fork提交关系
  8. HBuilderX无法启动微信小程序?仅三步
  9. [BUUCTF]PWN——mrctf2020_shellcode
  10. java 数据类型String 【正则表达式】匹配工具 Pattern和Matcher