5.1面向对象的基本概念

5.5.1类

类是由属性和方法组成的,类是面向对象的核心和基础,可以将相似的对象封装在一个类中

5.1.2对象

对象是类的实例化,创建一个对象表示实例化一个类

只有创建对象,才可以使用类的属性和方法

5.1.3面向对象的三大特性

封装,继承和多态

1、封装,是指把类的使用和实现分开,只保留有限的接口给外部使用。

封装只留给开发者一个访问对象的接口,使开发者不能直接访问内部信息

2、继承

3、多态

5.2类与对象

对象:是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

类:对具有相同特性和行为的对象的抽象

类是对象的模板,对象是类的具体体现。

5.2.1类的定义

class PlayerObject{}

5.2.2成员属性

//定义一个PlayerObject类,并添加普通属性,如姓名、体重、身高,以及组合属性。如健康程度(体重/身高的平方得到的值)
class PlayerObject{var name:String="Kotlin"setvar weight=0.0setvar height=0.0setvar BIM:String=""get(){var b=this.weight/Math.pow(this.height,2.0)if(b<=18.5){return "偏瘦"}else if(b in 18.5..23.9){return "过重"}else{return "肥胖"}}
}
fun main(args:Array<String>){var Player=PlayerObject()Player.weight=80.5println("${Player.name},${Player.height},${Player.weight},${Player.BIM}")
}

5.2.3成员方法

类的函数==成员方法

5.2.4对象实例化

//以PlayerObject类为例,实例化对象之后调用成员变量和成员方法playBasketBall()
fun main(args:Array<String>){var Player=PlayerObject()Player.name="Kotlin"Player.weight=48.0Player.height=1.60println("${Player.name},${Player.height},${Player.weight},${Player.BIM}")Player.playBasketball()
}

5.2.5构造函数

class PlayerObject constructor(var name:String,var weight:Double,var height:Double){var sex:String=""setval BIM:Stringget(){var b=this.weight/Math.pow(this.height,2.0)if(b<=18.5){return "偏瘦"}else if(b in 18.5..23.9){return "正常"}else{return "肥胖"}}fun playBasketball(){println("我可以打篮球")}fun main(args:Array<String>){var Player=PlayerObject("Kotlin",48.0,1.60)Player.sex="Female"println("${Player.name},${Player.sex},${Player.height},${Player.weight},${Player.BIM}")Player.playBasketBall()}
}

5.2.6继承和多态的实现

1、继承

//定义一个PlayerObject类,并添加普通属性,如姓名、体重、身高,以及组合属性。如健康程度(体重/身高的平方得到的值)
class PlayerObject1{var name:String="Kotlin"setvar weight=0.0setvar height=0.0setvar BIM:String=""get(){var b=this.weight/Math.pow(this.height,2.0)if(b<=18.5){return "偏瘦"}else if(b in 18.5..23.9){return "过重"}else{return "肥胖"}}
}
fun main(args:Array<String>){var Player=PlayerObject1()Player.weight=80.5println("${Player.name},${Player.height},${Player.weight},${Player.BIM}")
}

2、重载

class Burders(var a:Boolean){init{if(this.a==true){this.show()}else{this.say()}}fun show(){println("show方法")}fun say(){println("say方法")}
}
fun main(args:Array<String>){var b=Burders(false)
}

5.2.7封装

//封装一个类,完成两个数的加减乘除,并针对num1,num2和operator三个变量进行不同的权限赋予,然后输出运算结果
class CalculatorNum(protected var num1:Int,private var num2:Int){public var operator:Char='+'fun getnum1(){println("${num1}")}internal fun getnum2(){println("${num2}")}fun caculatNum(){when(this.operator){'+'->{println("两个数相加:${this.num1+this.num2}")}'-'->{println("两个数相减:${this.num1-this.num2}")}'*'->{println("两个数相乘:${this.num1*this.num2}")}'/'->{println("两个数相除:${this.num1/this.num2}")}}}
}
fun main(args:Array<String>){var CaculatorNum=CalculatorNum(100,20)CaculatorNum.operator='-'CaculatorNum.getnum1();CaculatorNum.getnum2();CaculatorNum.caculatNum();
}
//创建一个父类Outer,并创建两个子类继承这个父类,查看public,protected,private,internal修饰符
open class Outer{private var a=1protected var b=2internal var c=3open public var d=4
}
class subclass:Outer(){fun test(){println(super.b)println(super.c)println(super.d)}
}
class Unrelated(public val o:Outer){fun test(){println(o.c)println(o.d)}
}

5.3 Kotlin对象高级应用

5.3.1this关键字的使用

//当类被实例化后,this同时被实例化为该类的对象,这时候对类使用javaClass方法,将打印该类名
class athis(){private var a:String="this is a "fun showclass(){println(this.javaClass)}fun seta(a:String):String{this.a=areturn a}fun geta():String{return this.a}
}
fun main(args:Array<String>){var athis=athis()athis.seta("this is a")print(athis.geta())
}

5.3.2super关键字的使用

open class superfather(){var a=10fun message(){println("This is class superfather fun")}
}
class son:superfather(){fun show(){super.message()println(super<superfather>.a)println("This is class son fun")}
}
fun main(args:Array<String>){val son=son()son.show()
}

5.3.3 open关键字的使用

class Person{private var Name="Kotlin"class Language{var list= arrayListOf("中文","英语","日语")var str=list.joinToString ()}inner class Names{fun changeName(newName:String){Name=newNameprintln("您可以看到新的名字是${Name}")}}
}
fun main(args:Array<String>){println(Person.Language().str)Person().Names().changeName("Kotlin")
}

5.3.5数据类

//创建一个文章数据类,该数据类存储有id号,文章标题name和文章描述dec三个变量
data class article(var id:Int,var name:String,var dec:String)
fun main(args:Array<String>){var article=article(1,"Kotlin","全栈编程语言")println(article.toString())//序列化var newName=article.copy(id=2,name="Java",dec="面向对象编程语言")println(newName.toString())//更改属性var(id,name,dec)=articleprintln("${id},${name},${dec}")//解构println("${article.component1()},${article.component2()},${article.component3()}")//component方法
}

5.3.6枚举类

//创建两个枚举类,分别是rainbow(彩虹的颜色),和corour(颜色的rgb值)
enum class rainbow{赤,橙,黄,绿,青,蓝,紫
}
enum class corour(val rgb:Int){RED(0xFF000),GREEN(0x00FF00),BLUE(0x0000FF)
}
enum class anonys{WATTING{override fun signal()=TALKIN},TALKIN{override fun signal()=WATTING};abstract fun signal():anonys
}
fun main(args:Array<String>){println(rainbow.values().joinToString() )println(corour.GREEN)println(corour.valueOf("BLUE").name)println(corour.valueOf("BLUE").ordinal)//序号println(corour.values().joinToString { it.name+":"+it.rgb })println(corour.valueOf("BLUE").rgb)println(anonys.values().joinToString { it.name })}

5.3.7 对象表达式和对象声明

//创建一个类A,然后在main函数中创建一个与类A相关的对象表达式
open class A(x:Int){public open val y:Int=x}
fun main(args:Array<String>){var ab:A=object :A(10){override val y=15}
}

对象声明

Kotlin-面向对象相关推荐

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

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

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

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

  3. Kotlin面向对象

    面向对象编程通过对事物的抽象,大大的简化了程序的开发难度.我们常用的编程语言:Java.C++.Python都属于面向对象编程.Kotlin与java类似,也是一种面向对象编程语言.本文从面向对象三个 ...

  4. 【Android开发日志】Kotlin 面向对象编程 - 类与对象(11)

    Android Studio 4.0已发布,此教程已更新至4.0版本. 面向对象,顾名思义,一定得是"对象",生活当中的人.电脑.等任何事物,他们都有各自的属性,我们编程里把这些属 ...

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

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

  6. Kotlin - 面向对象之抽象类与接口

    接口 接口是一种约定或协议,需要使用 interface 定义: interface InputDevice {fun input(event: Any) } 接口不能有状态,我们可以在接口中声明一个 ...

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

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

  8. 【Kotlin】Kotlin 面向对象 ( 类 | 成员变量 | 成员方法 | 封装 | 继承 | 多态 )

    文章目录 I . 创建简单类 ( 整型字段 ) II . 创建简单类 ( 整型字段 + 字符串字段 ) III . 类方法定义 IV . 封装 V . 继承 VI . 多态 与 抽象类 I . 创建简 ...

  9. Kotlin极简教程:第7章 面向对象编程

    原文链接:https://github.com/EasyKotlin 在前面的章节中,我们学习了Kotlin的语言基础知识.类型系统.集合类以及泛型相关的知识.在本章节以及下一章中,我们将一起来学习K ...

  10. Kotlin系列之类和属性

    这一节我们学习Kotlin的类和属性. 学习过Java的小伙伴对面向对象应该不会陌生吧.虽然说Kotlin支持直接在文件中写函数,但是它同样支持面向对象,下面就来了解一下Kotlin的类和属性相关的知 ...

最新文章

  1. struts2 简单应用
  2. 《leetcode》valid-sudoku
  3. 给指定Python版本安装指定版本库的办法
  4. 等了一年终于要来了 电影《八佰》定档8月21日全国上映
  5. 别忘记了修正反欺诈中的这些内容
  6. C++ 字节序测试代码
  7. 科研热点|中科院文献情报中心:2022分区表即将发布,这几大变化值得关注~
  8. 计算机上面的清除键是什么符号,电脑上删除键是哪一个
  9. tableau中快速实现环比增长率计算
  10. 关于MATLAB调用第三方程序
  11. 【文章整理】一文看懂Cola架构和DDD
  12. 涉案资金超10亿,又一洗钱团伙被端,“二清”警钟不能忘
  13. 谈谈WebService开发-基础篇
  14. AutoCAD Civil 3D-曲面-1、曲面创建
  15. MySQL创建组合索引
  16. Leetcode题库1823. 找出游戏的获胜者(约瑟夫环 C实现)
  17. 人生只有一件事:坚持正确改正错误
  18. oracle20005,oracle 由于impdp 引起的表统计信息被锁 ORA-20005: object statistics are locked...
  19. 【OneOS万耦启物】
  20. python学习027-----python之函数(三):函数返回值、局部变量与全局变量

热门文章

  1. 校验MD5值是什么意思?
  2. 【Android】Android入门
  3. 如何在 Linux 中使用 Calibre 将 PDF 文件转换为 EPUB 格式?
  4. using声明和using编译指令
  5. 随机数产生器(random number generator)
  6. t3软件怎么生成报表_t3财务报表
  7. initramfs学习
  8. 如何在Ubuntu上安装并使用Docker
  9. 【iOS】NSString rangeOfString
  10. 深度 | 智慧城市背景下的“多规合一”标准探究