Kotlin学历之扩展与委托
简述
讲到Kotlin中的扩展,不得不说代码的设计原则之一:开闭原则,意思是对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,在Kotlin中就用到了扩展函数或者属性。委托模式已经证明是实现继承的一个很好的替代方式,就像在java中你宁愿使用组合方式也不使用继承,在kotlin中也是同样的道理,下面举例讲解。
扩展函数
扩展函数是很多高级语言中都支持的特性,下面代码示例在kotlin中的特点及用法。
例1: 扩展声明
//扩展函数
fun 要扩展的类. 函数名[(参数1:类型,参数2:类型)]{}
代码演示:在Int类扩展sum函数后,任何Int类型的对象都可以调用该函数。
例2:需要注意的是,扩展不能真正的修改他们所扩展的类,通过定义一个扩展,你并没有在一个类中插入新成员, 仅仅是可以通过该类型的变量用点表达式去调用这个新函数。扩展函数是静态分发的,如果存在继承关系的同一函数,它在运行时的行为是跟调用者有关,而不是继承者。如:
可以看到:最终打印的不是“d”,所以以后用到这种情况的时候一定要注意。同样道理再看个例子:扩展原有函数是不能改变原有行为的。这里说明一点如果函数名相同,参数不同是可以扩展的。
扩展属性
扩展属性需要注意点就是:扩展的属性不像原有属性一样自带 get()、set(),需要自己声明,而且必须声明.
例如:给C类分别添加a,b,c属性。 a属性正常,b属性要么更改为val ,要么添加set()函数。c必须添加get()函数
委托
经过对类委托的学习,发现与java中的组合其实是一样的,就是在类中添加接口属性,使用过程中再传入具体实现,动态改变行为。其实就是个策略模式。
例子:通过例子中看出,Derived类调用的print方法,其实就是Base Impl中的实现,跟java只是在书写上的不同而已。 要用到by关键字。
看下图和上面输出结果是一样的,其实就是省去了一个函数调用而已。当然这么写已经不是策略模式了- -
总结
通过本次的学习,对扩展和类委托基本掌握了,由于委托属性内容较多,先把这些内容消化下,再次学习委托属性。下次再见。
http://www.taodudu.cc/news/show-5567609.html
相关文章:
- 职称英语计算机免试审批表,职称计算机用人部门盖章的查询证明.doc
- 基于SSM的学籍证明打印系统设计与实现。
- java线程池的面试题_java线程池 面试题(精简)
- 笔记本电脑由未签名驱动导致的键鼠装无法使用的问题 usb 问题失效的解决办法
- 派派交友机器人_派派技能免费教大家点技能
- SpringBoot多数据源配置事务
- 提问:什么因素造就了「社交」的关系?
- 被黑产攻击后的血泪控诉…
- java test60006_派派6.0006旧版本v60006 老版本 Android
- 00后社交人群崛起 派派创新互动模式受关注
- 派派和京东的paipai域名之争
- “派派”的用户病毒营销
- 易语言 将网页保存为word文件
- 用python写web网页实现音乐数据库查询_Python tornado用40行代码搭建数据库交互网页实现快速全栈开发...
- wps如何删除括号里的内容_文档中怎么批量去除括号里面的答案 - 卡饭网
- html制作故宫,故宫x金山WPS:H5设计全过程
- 无需代码即可实现Excel中图片链接的批量下载
- 如何将wps转换成html单元格内的图案还保留,如何利用WPS将网络数据转为表格 Excel批量转为Html,Html转换成Excel...
- vue中使用ckeditor,支持wps,word,网页粘贴
- wps html如何保存excel,wps excel导入html表格数据格式转换-怎样将wps表格中的数值转换为文本形式...
- Windows中 redis 设置密码
- dm6437外设
- 一次百万长连接压测 Nginx 内存溢出问题
- matlab 绘制正方体,三维立体图(patch)
- Python turtle 绘制正方体
- 使用Python中的Turtle库画正方体
- css3动画-正方体
- 用matlab用mesh画正方体,用Matlab三维网线图函数mesh绘制正方体
- JavaScript核心技术之JSON详解
- ps学习一——婚纱设置
Kotlin学历之扩展与委托相关推荐
- 学习Kotlin(六)扩展与委托
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- Swift vs. Kotlin 漫谈之扩展篇
Swift vs. Kotlin 漫谈之扩展篇 转载自公众号 KotlinThree 里的一篇文章:https://mp.weixin.qq.com/s?__biz=MzU3MDA3NzMzOA==& ...
- 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...
- Android Kotlin Coroutines ktx扩展
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119831011 本文出自[赵彦军的博客] 文章目录 lifecycle 扩展 vi ...
- kotlin学习笔记——接口与委托
kotlin中的接口比java7中的要强大很多,与java8的很相似. java7中的接口只能定义行为,不能实现. kotlin中的接口也可以实现函数,但是与类的区别是它们是无状态(stateless ...
- Kotlin ExpandableListView可扩展二级列表,大厂安卓面试真题精选
groupName.add("统计1") groupName.add("统计2") return groupName } - 3.1 StatisticsAda ...
- Kotlin笔记(七)——委托属性(Delegated Properties)
Delegated Properties我姑且将其称为委托属性,因为实在不知道怎么翻译好,委托属性是一类特殊的Kotlin属性,先来看看最基本的委托属性. class Dog1 {var name: ...
- Kotlin | 委托(Delegation )详解
本文要点概述 辨析委托模式与代理模式 接口委托(Delegated interface) 属性委托(Delegated properties) 映射委托(Map delegation) 延迟属性(la ...
- kotlin学习笔记——委托属性
委托属性 kotlin提供了将属性委托到一个类的方法,就是委托属性. 当我们使用属性的get和set方法时,属性委托的getValue和setValue就会被调用. 属性委托的结构如下: class ...
最新文章
- 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第十章——自编解析与答案
- MOCTF-Web-Flag在哪?
- 模板:半平面交(计算几何)
- android 基类fragment,Android DialogFragment 基类的定制
- 使用caffe自带模型训练cifar10数据集
- Ethercat解析(十二)之命令行工具的使用
- wtf是转换ttf_WTF入门,它是终端的仪表板
- element分页点击事件_关于原生dom事件添加、删除方法的一些拓展
- 使用lucene3.6创建索引和实现简单搜索
- 2018年,AI会在金融行业哪些方向上发力?
- 华为MA5200G实现radius认证登陆
- sonarqube 数据清理
- js逆向-1 模拟登陆微信公众号平台
- 语音机器人在人工智能领域的发展
- 大学计算机案例教程旧照片修复,破损旧照片修复教程
- AI绘画与虚拟人生成实践(二):智能不智障!用chatgpt自动写爆款内容
- 【CSS3】一文搞懂盒子模型(知识点加案例)
- 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
- WRL::ComPtr 的坑
- 2021年焊工(技师)考试资料及焊工(技师)模拟试题