Koitlin_Day04
知识点1:Kotlin运算符及其重载
* 算术运算符 + - * / % * 自增自减 ++ -- * 关系运算符 == != > < >= <= * 逻辑运算符 && || & | * 赋值运算符 += -= *= /= %= * 其他运算符 xx?xx:xx instanceof * 1.Kotlin每个运算符都对应一个方法,如果说想要把对象之间相加重写对应的方法即可 * 2.kotlin运算符对应的方法可以在官网查询fun main(args: Array<String>) { var a = 10 var b = 16 var c = a + b println(c)//26 a++ println(a)//11 var girl1 = Girl("a",12) var girl2 = Girl("b",13) var girl = girl1 + girl2 println(girl)//Girl(name='ab', age=25) var boy1 = Boy("korben",28) var boy2 = Boy("korben",30) var s = boy1 +10 //注意:重写Boy类运算符方法时,参数值的类型以及返回值的类型要根据相加的数值类型 //比如:boy1+10,重写后的运算符方法的参数值和返回值类型就需要是Int类型 //如果boy1+boy2 那么重写的运算符方法的参数值和返回值类型就需要时Boy类型 println(s)//38}class Girl(var name:String,var age:Int){ operator fun plus(girl: Girl): Girl { this.age += girl.age this.name +=girl.name return this } override fun toString(): String { return "Girl(name='$name', age=$age)" } }class Boy(var name:String,var age:Int){ operator fun plus(s:Int): Int { this.age += s return this.age } override fun toString(): String { return "Girl(name='$name', age=$age)" } }
知识点2:运算符重载
/*--------------------需求:写一个类的两个对象相加的和----------------------*/fun main(args: Array<String>) { var c1 = Cat("黑猫",4) var c2 = Cat("灰猫",4) var c = c1 + c2 println(c)//8}class Cat(var category:String,var leg:Int){ //注意plus()的参数值只能是一个 operator fun plus(c:Cat):Int{ return this.leg+leg } }
知识点3:运算符重载练习
/*--------------------需求:求一个老师从助教-讲师-副教授-教授的等级和薪资变化 ++----------------------*/fun main(args: Array<String>) { var t1 = Teacher()//助教 println(t1)//Teacher(等级=1, 薪资=6000) var t2 = t1++//讲师 println(t2)//Teacher(等级=2, 薪资=7000) var t3 = t2++//副教授 println(t3)//Teacher(等级=3, 薪资=8000) var t4 = t3++//教授 println(t4)//Teacher(等级=4, 薪资=9000)}class Teacher{ var level = 1 var salary = 6000 operator fun inc():Teacher{ this.level++ salary += 1000 return this } override fun toString(): String { return "Teacher(等级=$level, 薪资=$salary)" } }
知识点4:类成员的set/get方法
fun main(args: Array<String>) { var p1 = PersonS() println(p1.name)//咚咚锵 p1.age=19 println(p1.age)//19 var p = Person("koben",28) println(p)//Person(name='koben' age='12')}//1.kotlin的类成员变量已经默认实现了get/set方法//2.类成员变量可以访问和修改class PersonS{ var name = "咚咚锵" var age = 18}class Person(var name: String,age:Int){ var age = 12 get() { return field//作用:在get/set里面访问字段 //如果此处使用return this.age会产生递归 一直调用get()方法 } /*get() = this.age*/// get//Person(name='koben') override fun toString(): String { return "Person(name='$name' age='$age')" } }
知识点5:修改成员的可见性
@ FileName:修改成员的可见性` --->也就是使用private修饰成员变量或者setfun main(args: Array<String>) { /*var s = School("21","dalian") var s1 = School("23","shanghao") println(s) println(s1)*/ var l = LOL() println(l.name)//XY l.age = 26//修改LOL里面的年龄 println(l.age)//26}class LOL{//对应java只有成员变量和set/get方法 var name = "XY"/*----------需求:在外面 只能访问name 不能修改name 在里面可以修改-:使用private修饰name的set方法-------*/ private set var age = 23/*---需求:在外面 在外面既不能访问age 也不能修改age 在里面可以:使用private关键字修饰成员变量sex------*/ private var sex = "gilr"}class Student(){//对应的Java编码:类中有name和age成员变量及其set/get方法(注意;Student后面有没有()都一样的 ) var name = "齐德龙" var age = "17"}class School(name:String,place:String){//对应的Java编码:类中只有一个有参构造方法}class Fat(var name: String,var leg:Int){//对应的Java编码:类中有成员变量及其set/get方法,以及有参构造方法}
知识点6:自定义访问器
/*--------------------Start Kotlin----------------------*//** * @ FileName: `06.自定义访问器`--->也就是自定义set/get方法内的内容 * @ Author: LanSir * @ Time: 2018/8/8 17:09 * @ Description: * 每一个字段都可以通过filed表示! */fun main(args: Array<String>) { var worker = Worker() println(worker.name)//齐德龙 println(worker.age)//1 worker.name="12" println(worker.name)//王德发 worker.age=2 println(worker.age)//20}//set作用,在外部修改的时候限制内容或者范围class Worker{ var name = "齐德龙" set(value) {field = "王德发"} var age = 1 set(value) {if (age<100 && age >18)field=value else field = 20} }
知识点7:主构函数及其参数使用
fun main(args: Array<String>) { var s = Stu("XY",18) println(s.name)//XY println(s.age)//18 s.age = 25 s.name = "sir" println(s.age)//25 println(s.name)//sir}//Kotlin构造函数 --->主构函数class Stu(name:String,age:Int){ var name = "王德发" var age = 16 /*init { this.name = name this.age = age }*/ override fun toString(): String { return "Stu(name='$name', age=$age)" } }
知识点8:var和val在主构函数中的使用
* 1.如果没使用var\val修饰,参数在其他地方不能使用\ * 2.使用var修饰的,在其它地方可以使用,也可以修改 * 3.如果使用val修饰,在其它地方可以使用,但是不能修改 */fun main(args: Array<String>) { var p = Pig("yezhu",60.5) p.weight p.weight = 90.2 println(p.weight)//90.2}//var/val 相当于我们定义了字段 可以直接使用class Pig(var name:String,var weight:Double)
知识点9:次构函数
fun main(args: Array<String>) { var dt1 = Doctor("dong") var dt2 = Doctor("dong",23) println(dt1)//Doctor(name='dong') println(dt2)//Doctor(name='dong')}class Doctor(var name: String){ //次构函数必须调用主构函数,必须要把参数传递给主构函数 constructor(name:String,age:Int):this(name) override fun toString(): String { return "Doctor(name='$name')" } }
知识点10:次构函数间调用
fun main(args: Array<String>) { }class DD(var age:Int){ //次构函数必须调用主构函数,必须把参数传给主构函数 constructor(age: Int,height:Double):this(age) //次构函数可以调用主构函数,可以调用次构函数(其实是间接调用快乐主构函数) constructor(age: Int,height: Double,weight:Double):this(age,height) }
知识点11:次构函数使用
* 构造函数加var和val只能在主构函数里面加 次构函数不能加 * 主构函数参数可以直接加上var和val使用 次构函数只能够自己定义变量进行保存 */fun main(args: Array<String>) { var lov = Lov("咚咚锵") println(lov.phone) }class Lov(var name:String){ var age = 18 var phone = "7Plus" constructor(name: String,age:Int,phone:String):this(name){ //次构函数不能加var/val,只能通过这种方式 this.age = age this.phone = phone } }
作者:蓝Renly
链接:https://www.jianshu.com/p/9c738b37c326
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦