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

洗衣机初步:

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

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

接下来则用一下这个类:

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

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

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

洗衣机升级:

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

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

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

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

/*** 洗衣机*/
class WashMachine(var module: String/* 品牌 */, var size: Int/* 容积:升为单位 */) {/* 门是否开着,默认开着 */var isDoorOpen = true/* 当前洗衣模式 */var currentMode = 0fun 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 = modewhen (mode) {0 -> println("初始模式,请您选择模式")1 -> println("轻柔")2 -> println("狂柔")else -> println("不要乱拧,拧坏了不保修呀!")}}
}

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

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

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

洗衣机封装:

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

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

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

接下来做下测试:

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

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

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

此时再看main方法:

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

转载于:https://www.cnblogs.com/webor2006/p/8046615.html

kotlin面向对象实战~相关推荐

  1. Kotlin 编程实战

    code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 导读:Kotlin诞生于2011年,开源于2012年,吸收了Java等语言的优良特性,提供了令人惊艳的编程体验,是编 ...

  2. 安卓开发重磅炸弹!程序员福利!《高级Kotlin强化实战学习手册(附Demo)》开放下载!

    前言 自Google宣布将 Kotlin 作为 Android 开发的首选语言 (Kotlin-first),现已有60% 的专业 Android 开发者已经采用了该编程语言.在 Google Pla ...

  3. 阿里架构师开源《Kotlin入门教程指南》+《高级Kotlin强化实战》

    对于有Java基础的程序员来说,Kotlin是一门非常容易上手的编程语言,也是一门必须掌握的编程语言.Java代码在运行前需要编译生成一种特殊的class文件,然后Java虚拟机会识别并解释这些cla ...

  4. python 完全面向对象_python面向对象实战

    一 面向对象的程序设计的由来 二 什么是面向对象的程序设计及为什么要有它 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条 ...

  5. 《Kotlin 程序设计》第五章 Kotlin 面向对象编程(OOP)

    第五章 Kotlin 面向对象编程(OOP) 正式上架:<Kotlin极简教程>Official on shelves: Kotlin Programming minimalist tut ...

  6. Kotlin Jetpack 实战:01. Kotlin 基础

    背景 近几年,Android 相关的新技术层出不穷.往往这个技术还没学完,下一个新技术又出来了.很多人都是一脸黑人问号?不少开发者甚至开始哀嚎:"求求你们别再创造新技术了,我们学不动了!&q ...

  7. Kotlin Jetpack 实战: 图解协程原理 | 开发者说·DTalk

    本文原作者: 朱涛,原文发布于: 朱涛的自习室 https://mp.weixin.qq.com/s/fN4cSg6jcFZo3Wb2_xcJVw 协程 (Coroutines),是 Kotlin「最 ...

  8. Kotlin Jetpack 实战: Kotlin 基础 | 开发者说·DTalk

    本文原作者: 朱涛,原文发布于: 朱涛的自习室 https://mp.weixin.qq.com/s/MSbSPeWNlM5PJCFmLg2SVQ 背景 近几年,Android 相关的新技术层出不穷. ...

  9. 《Kotlin项目实战开发》第1章 Kotlin是什么

    第1章 Kotlin是什么 当下互联网大数据云计算时代,数以百万计的应用程序在服务器.移动手机端上运行,其中的开发语言有很大一部分是用流行软件界20多年的.强大稳定的主力的编程语言Java编写. 如果 ...

  10. 《Kotlin项目实战开发》第5章 函数与函数式编程

    第5章 函数与函数式编程 凡此变数中函彼变数者,则此为彼之函数. ( 李善兰<代数学>) 函数式编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以传入函数 ...

最新文章

  1. CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...
  2. java 注解类说明
  3. 吴文俊人工智能科学技术奖:陆汝钤院士、百度王海峰等获奖
  4. 省市县导入mysql代码,通过csv
  5. SpringMVC入门学习---拦截器
  6. apache mysql 连接数 winnt,APACHE PHP MYSQL PHPMYADMIN超详细配置教程
  7. java_day21_反射和注解
  8. Oracle PL/SQL小练习
  9. Scala声明类及创建类的对象
  10. 博客属性10个非常不错的CSS技巧
  11. python脚本语言采用声音作为手段_python 利用pyttsx3文字转语音过程详解
  12. “约见”面试官系列之常见面试题第十五篇之jsonp(建议收藏)
  13. php tr td,php-基于tr计数的Td / th的XPath
  14. WPF Grid布局
  15. 【渝粤教育】广东开放大学 社会学概论 形成性考核 (50)
  16. 问题 1020: [编程入门]猴子吃桃的问题
  17. 三角函数到傅立叶级数
  18. 第六周作业--需求建模
  19. 苹果手机点击事件无效的解决办法
  20. 用vue写的移动端车牌号输入法

热门文章

  1. python得安什么安装包_初学 Python 需要安装哪些软件?
  2. windows10重装后锁定其他盘_电脑重装Windows10系统步骤
  3. C语言:采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息
  4. linux已开机时间,Linux查看系统开机时间
  5. scala 隐式参数入门及应用
  6. Foundation 框架 NSArray、NSMutableArray排序
  7. 基于Vue2.x的小米商城移动端项目
  8. 51nod 1273 旅行计划——思维题
  9. 第二次冲刺-个人工作总结05
  10. Swoole Framework 入门教程(1)