简述

讲到Kotlin中的扩展,不得不说代码的设计原则之一:开闭原则,意思是对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,在Kotlin中就用到了扩展函数或者属性。委托模式已经证明是实现继承的一个很好的替代方式,就像在java中你宁愿使用组合方式也不使用继承,在kotlin中也是同样的道理,下面举例讲解。

扩展函数

扩展函数是很多高级语言中都支持的特性,下面代码示例在kotlin中的特点及用法。

例1: 扩展声明

//扩展函数
fun 要扩展的类. 函数名[(参数1:类型,参数2:类型)]{}

代码演示:在Int类扩展sum函数后,任何Int类型的对象都可以调用该函数。

扩展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学历之扩展与委托相关推荐

  1. 学习Kotlin(六)扩展与委托

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  2. Swift vs. Kotlin 漫谈之扩展篇

    Swift vs. Kotlin 漫谈之扩展篇 转载自公众号 KotlinThree 里的一篇文章:https://mp.weixin.qq.com/s?__biz=MzU3MDA3NzMzOA==& ...

  3. 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射

    一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...

  4. Android Kotlin Coroutines ktx扩展

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119831011 本文出自[赵彦军的博客] 文章目录 lifecycle 扩展 vi ...

  5. kotlin学习笔记——接口与委托

    kotlin中的接口比java7中的要强大很多,与java8的很相似. java7中的接口只能定义行为,不能实现. kotlin中的接口也可以实现函数,但是与类的区别是它们是无状态(stateless ...

  6. Kotlin ExpandableListView可扩展二级列表,大厂安卓面试真题精选

    groupName.add("统计1") groupName.add("统计2") return groupName } - 3.1 StatisticsAda ...

  7. Kotlin笔记(七)——委托属性(Delegated Properties)

    Delegated Properties我姑且将其称为委托属性,因为实在不知道怎么翻译好,委托属性是一类特殊的Kotlin属性,先来看看最基本的委托属性. class Dog1 {var name: ...

  8. Kotlin | 委托(Delegation )详解

    本文要点概述 辨析委托模式与代理模式 接口委托(Delegated interface) 属性委托(Delegated properties) 映射委托(Map delegation) 延迟属性(la ...

  9. kotlin学习笔记——委托属性

    委托属性 kotlin提供了将属性委托到一个类的方法,就是委托属性. 当我们使用属性的get和set方法时,属性委托的getValue和setValue就会被调用. 属性委托的结构如下: class ...

最新文章

  1. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第十章——自编解析与答案
  2. MOCTF-Web-Flag在哪?
  3. 模板:半平面交(计算几何)
  4. android 基类fragment,Android DialogFragment 基类的定制
  5. 使用caffe自带模型训练cifar10数据集
  6. Ethercat解析(十二)之命令行工具的使用
  7. wtf是转换ttf_WTF入门,它是终端的仪表板
  8. element分页点击事件_关于原生dom事件添加、删除方法的一些拓展
  9. 使用lucene3.6创建索引和实现简单搜索
  10. 2018年,AI会在金融行业哪些方向上发力?
  11. 华为MA5200G实现radius认证登陆
  12. sonarqube 数据清理
  13. js逆向-1 模拟登陆微信公众号平台
  14. 语音机器人在人工智能领域的发展
  15. 大学计算机案例教程旧照片修复,破损旧照片修复教程
  16. AI绘画与虚拟人生成实践(二):智能不智障!用chatgpt自动写爆款内容
  17. 【CSS3】一文搞懂盒子模型(知识点加案例)
  18. 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
  19. WRL::ComPtr 的坑
  20. 2021年焊工(技师)考试资料及焊工(技师)模拟试题

热门文章

  1. 弘辽科技:直通车会压制搜索流量吗?
  2. pdf转换成ppt的软件下载
  3. 开启微信悬浮窗权限有什么用_给微信设置特效提醒,收到消息屏幕会“开花”...
  4. linux 关闭进程脚本
  5. 区域环评项目(Vue3 PC)实现验证码等功能 问题记录
  6. qq上怎么设置拍一拍?1分钟学会,简单教学
  7. 无线覆盖解决方案需要考虑哪些细节
  8. 1155: 5202 二进制转化为十六进制
  9. ios截屏后发现图片是空白问题
  10. Cygwin访问windows磁盘目录