博客
关于我
[面向对象杂谈]接口
阅读量:446 次
发布时间:2019-03-06

本文共 1104 字,大约阅读时间需要 3 分钟。

人总是很忙的,但是一个人就是一个人,不存在分身术。

假设有个人王大柱,他是光明中学的校长,还是光明村的村委会成员,同时还是他儿子的父亲。

那么我们可以这么想:王大柱是一个类的具体的实现对象,这类名叫“王大柱类”,而王大柱类实现了三个接口:“I光明中学校长”、“I光明村村委会成员”、“I父亲”。

画图如下:

 

那么我们可以称这三个接口为这个类的三个“身份”。

我们可以这样制造一个王大柱出来:

王大柱类 王大柱 = new 王大柱类();

此时,“王大柱”这个变量就代表了[王大柱类]的实例。这个没问题吧?

 

戏剧性的事情来了。

>“王大柱”在学校是什么身份呢?按正常的角度,他应该是校长的身份,管理学校的方方面面才对。

>“王大柱”在村委会是什么身份呢?按正常角度,他应该是村委会成员,参与村委会的会议和讨论。

>“王大柱”在家里是什么身份呢?按正常的角度,他应该是他儿子的父亲,在家带孩子陪老婆。

 

所以接下来的代码大家看仔细了:

// 王大柱要以校长身份去开师生会议I光明中学校长  王校长 = 王大柱 as  I光明中学校长;王校长.召开师生会议();

我们知道,接口可以定义变量,也可以实例化对象(用于实例化的类必须实现该接口)。

现在,我用I光明中学校长这一身份,去定义“王校长”这个变量,或者说定义这张工作证,有了这张工作证,“王大柱”这个人,身份就会转化为"王校长",但是"王校长"还是王大柱,并不是第二个人。这就是说,我在上面用关键字new的“王大柱”,在内存(地球)中只有一个对象(人),接口定义的"王校长"这个变量,仅仅指向了wdz这个人,给了他一层校长的身份而已。

如下图:

 

熟悉C++指针/内存堆栈的同学一定不陌生,左边就是堆,右边就是栈,堆是真正的数据,而右边的“王大柱”、“王校长”,只是一些变量,真正的数据和变量之间的关系,在这里就是引用关系。

但是接口编程又有一个不同的特点,也是极为重要的一个特点:接口有自己的成员变量。

换句话说,“王大柱”在家里,不是学校的“校长”,校长给老师和主任发通知的功能就没了呀!难道向老婆儿子发命令?找打。

这就是身份的问题,接口可以为堆上的对象提供不同的身份,实现不同的功能。

 

再来看下面的代码:

// 王大柱要去开会I光明村村委会成员 王委员 = 王校长 as I光明村村委会成员;王委员.到村里开会();// 王大柱要回家做饭给儿子吃I父亲 王爸爸 = 王委员 as I父亲;王爸爸.给儿子做饭();

读者可以自己想象了吗?

 

附:OOP(面向对象编程)三大特征

封装、继承、多态

这三个特征一直持续到编程的“设计模式”及以后更高层次的编程中。

转载地址:http://czzfz.baihongyu.com/

你可能感兴趣的文章
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>