有了java的面向对象的基础,其实对于kotlin这块的东东比较好理解,所以这里以洗衣机洗衣服为例,对面向对象进行一下实战,下面开始。

洗衣机初步:

首先先新建一个洗衣机类:

然后里面先定义基本属性:

接下来则用一下这个类:

接下来洗衣服之前得将门打开与关闭,则所这时需要在洗衣机类中增加开门和关闭的方法,如下:

接下来则应该开始洗衣服,所以需要增加一个开始执行的方法,如下:

至此洗衣机的基本流程已经写好了,但是还不够完善,比如门打开状态中就开始放水,那水得溢出来,因为只有门关上了才能感知到水位等等,接下来则会对这个类进行完善。

洗衣机升级:

如上面所描述的,在开始洗衣之前得确认门是否关着的,所以需要加一个变量用来记录门的开关状态,如下:

这时测试一下效果,假装忘了关门了,如下:

而现实中洗衣机是有模式选择的,对于洗内裤和洗牛仔裤洗法应该是完全不一样的,内裤得轻柔的洗,而牛仔裤得狂柔的洗,所以接下来给洗衣机增加模式选择功能,如下:

有了模式之后,接下来洗衣服在不同的模式下其洗衣步骤也是不一样滴,所以修改下start()方法:

/**
* 洗衣机
*/
class WashMachine(var module: String/* 品牌 */, var size: Int/* 容积:升为单位 */) {
/* 门是否开着,默认开着 */
var isDoorOpen = true
/* 当前洗衣模式 */
var currentMode = 0 fun openDoor() {
println("洗衣机的门已经打开了...")
isDoorOpen = true
} fun closeDoor() {
println("洗衣机的门已经关闭了...")
isDoorOpen = false
} fun start() {
if (isDoorOpen) {
println("哔哔...门未关无法运行")
return
}
when (currentMode) {
0 -> println("选择模式错误,不能开始洗衣服")
1 -> {
println("放水")
println("轻柔开始,发动机转速 慢")
println("洗完啦")
}
2 -> {
println("放水")
println("狂柔开始,发动机转速 快")
println("洗完啦")
}
else -> {
println("选择模式错误,不能开始洗衣服")
}
}
} fun selectMode(mode: Int) {
currentMode = mode
when (mode) {
0 -> println("初始模式,请您选择模式")
1 -> println("轻柔")
2 -> println("狂柔")
else -> println("不要乱拧,拧坏了不保修呀!")
}
}
}

接下来咱们来测一下洗衣服,多条件:

所以这时放完衣服之后将门关上,如下:

接着选择一下模式,如下:

洗衣机封装:

目前洗衣机功能都已经写完了,但是仔细观察代码:

对于发动机实际是属于洗衣机的一个内部组件,它有转速的概念,有必要对发现动的行为进行一个统一个封装,所以接下来重构一下目前的洗衣机代码:

/**
* 洗衣机
*/
class WashMachine(var module: String/* 品牌 */, var size: Int/* 容积:升为单位 */) {
/* 门是否开着,默认开着 */
var isDoorOpen = true
/* 当前洗衣模式 */
var currentMode = 0 fun openDoor() {
println("洗衣机的门已经打开了...")
isDoorOpen = true
} fun closeDoor() {
println("洗衣机的门已经关闭了...")
isDoorOpen = false
} fun start() {
if (isDoorOpen) {
println("哔哔...门未关无法运行")
return
}
when (currentMode) {
0 -> println("选择模式错误,不能开始洗衣服")
1 -> {
println("放水")
println("轻柔开始,发动机转速 慢")
setMotorSpeed()
println("洗完啦")
}
2 -> {
println("放水")
println("狂柔开始,发动机转速 快")
setMotorSpeed()
println("洗完啦")
}
else -> {
println("选择模式错误,不能开始洗衣服")
}
}
} fun selectMode(mode: Int) {
currentMode = mode
when (mode) {
0 -> println("初始模式,请您选择模式")
1 -> println("轻柔")
2 -> println("狂柔")
else -> println("不要乱拧,拧坏了不保修呀!")
}
} fun setMotorSpeed(speed: Int) {
println("当前发动机转速为 ${speed} 圈/秒")
}
}

接下来做下测试:

接下来洗牛仔裤并换一下模式看看:

但是目前的设置转速对于用户来说是可以直接调用的,如下:

所以这里就涉及到函数的访问修饰服的问题,如下:

此时再看main方法:

所以这就达到合理封装的目的~

kotlin面向对象实战~的更多相关文章

  1. 开源分享:谷歌大佬联合打造《高级Kotlin强化实战(附Demo)》

    Kotlin 以其简洁的特性而闻名,而在我们的实践中,更加简洁就意味着更加高效.事实上,在使用 Kotlin 的专业 Android 开发者中,有多达 67% 的人表示 Kotlin 已经帮助他们提升 ...

  2. Kotlin强化实战!这份学习手册让你的面试稳如泰山

    一.引言 正如官网的slogan所描述:kotlin,是一门让程序员写代码时更有幸福的现代语言. 同时,也正如维基百科里介绍: JetBrains公司希望Kotlin能够推动IntelliJ IDEA ...

  3. kotlin面向对象入门

    之前在学kotlin基础语法时咱们是采用三方jar包在eclipse工程下进行的,很显然这工具在实际商用中基本上很少用到了,最终是要编写android程序,所以说从这里起得更换一个更加智能更加贴近实际 ...

  4. kotlin面向对象之抽象类、继承、多态

    继承: 比较简单,直接看如何使用,这里以父亲与儿子的关系为例: 接着定义儿子并且继承父亲,如下: 是用":"号来继承的,但是此时报错了,看下错误提示: 在kotlin的类并非是人人 ...

  5. kotlin面向对象之枚举、印章类

    枚举: 由于这个比较简单,直接上代码: 下面使用一下: 印章类[Sealed class]: 听着挺新鲜的,下面以一个具体的场景来对它进行学习: 动物园里有三个动物如下,在天黑时它们污污的在做“游戏” ...

  6. kotlin面向对象之接口、代理与委托、单例模式

    接口: 对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练: 而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"[我黄我暴利] ...

  7. kotlin面向对象-笔记

  8. Range与面向对象的Kotlin

    在上一次https://www.cnblogs.com/webor2006/p/11186089.html中已经用到了范围相关的东东了,如下: 所以这次专门针对Koltin范围相关的东东再来细学一下, ...

  9. Kotlin高阶函数实战

    前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...

随机推荐

  1. openstack——Rabbitmq集群部署

    一.前期准备 1.条件:准备3台Linux系统虚拟机,保持系统版本一致,确保配置好yum源,及网络源     2.3台虚拟机做静态解析 [root@yun1 ~]# cat /etc/hosts 12 ...

  2. 微信扫码无法直接下载APP的apk的解决办法

    PHP的处理方式:http://blog.sina.com.cn/s/blog_4cd978f90102wx92.html

  3. MySQL中的聚集索引和辅助索引

    MySQL中的聚集索引和辅助索引 当你定义一个主键时,innodb存储引擎就把他当做聚集索引 如果你没有定义一个主键,则innodb定位到第一个唯一索引,且改索引的所有列值均为非空,就将其当做聚集索引 ...

  4. windows登录密码忘记了怎么办?

    利用PE工具进行进行修改密码或者重置系统密码,正对于服务器也同样试用 目前U启动制作效果还不错,黑鲨一键装机,以及老毛桃我觉得还是算了,U深度也不错 经过这么久,小编也把该测试的测试了,,小编比较懒, ...

  5. C++中枚举类型的作用

    (1)C++中会使用const或者#define定义整型常量,当整型常量有多个且之间的值的全部或部分有递加的时候,定义起来稍显繁琐,此时用枚举类型显得很简洁: 例如: //使用const: const ...

  6. 新浪随机图片壁纸API接口 刷新网页换背景接口

    刷新一次页面换一次图片,可以调用到你的网站背景里面去,多炫酷啊,刷新一下本页看下效果哦. 说明:随机图片壁纸api,调用的是新浪api,速度不用担心,图片资源也很多 电脑动漫图片:http://api ...

  7. pycharm连接mysql是出现Connection to orm02@127.0.0.1 failed. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.

    下面这个问题反正我是遇到了,也是难为我好几天,于是我决定发一个教程出来给大家看看!希望能帮助你们 原因: 可能是数据库的版本与本机装的驱动不匹配导致的, 解决方案一: 在 url 后面街上一句 因为笔 ...

  8. MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  9. Fabric的简介

    1,初识fabric 1,什么是fabric fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理的效率. 简单来说: (1)一个让你通过命令行执行无参数python ...

  10. mssql 数据库“查询处理器用尽了内部资源,无法生成查询计划。”问题的处理

    在项目中动态拼接sql语句,使用union all连接结果集,每个查询语句都使用了in(几百个数值).语句如: ,,,..............................) UNION ALL ...