kotlin面向对象实战~
2024-09-02 09:34:40
有了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方法:
所以这就达到合理封装的目的~
最新文章
- AFNetworking 3.0 源码解读(五)之 AFURLSessionManager
- python 中变量的命名方法
- node(邮件发送特性)
- python黑客编程之端口爆破
- 深入浅出ASP.NET MVC5系列之一
- JS保留小数点(四舍五入、四舍六入)实例
- 电脑控制台灯(c# hook,显示室温,联网校正时间)
- OAuth2 通用组件源码下载(支持新浪微博、QQ、淘宝)(转载)
- 使用py2exe打包你的py程序
- equal 和 ==
- dsu + lca
- web项目学习之sitemesh
- DRBD脑裂解决方法
- mysqlcluster笔记
- 做一个自动修改本机IP和mac的bat文件
- flex chrome浏览器调试flex程序
- Markdown语法入门
- go generate 生成代码
- .NET高性能编程 - C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
- 深入理解pandas读取excel,txt,csv文件等命令
热门文章
- linux中查找命令find、locate、whereis、which、type的区别
- VAEs(变分自编码)之keras实践
- 李宏毅 Keras2.0演示
- 【VS开发】【C/C++开发】printf缓冲区刷新
- java ThreadGroup 作用 方法解析(转)
- Socket与系统调用深层分析
- (模板)luoguP3806(树上点分治模板题)
- 【Python】【demo实验25】【练习实例】
- 创建Sqoop作业,报错Exception in thread ";main"; java.lang.NoClassDefFoundError: org/json/JSONObject
- 同一台服务器请求easyswoole的一个websocket接口报错