定义类
如果将open和abstract两个修饰符放在一起使用,编译器会发出警告,open是Kotlin新引入的修饰符,open是final的反义词,用于修饰一个类、方法、或属性,表明类可派生子类、方法或属性可被重写
一个Kotlin类可以有0~1个主构造器和0~N个次构造器
中缀表达式
可以使用infix修饰方法,这样就表示中缀表达式------但是infix方法只能有一个参数
kotlin
fun main() {
var origin = Apple(2.4)
var ap = origin add Apple(3.3)
println(ap)
origin drop Apple(1.1)
println(ap)
}
class Apple(weight:Double){
var weight = weight
override fun toString(): String {
return "Apple(weight=$weight)"
}
infix fun add(other:Apple):ApplePack{
return ApplePack(this.weight+other.weight)
}
infix fun drop(other:Apple):ApplePack{
return ApplePack(this.weight-other.weight)
}
}
class ApplePack(weight: Double){
var weight= weight
override fun toString(): String {
return "ApplePack(weight=$weight)"
}
}
componentN方法与解构
Kotlin允许将一个对象的N个属性"解构"给多个变量,写法如下
如果希望将对象解构给多个变量,那么就必须为该对象的类定义componentN()方法。程序希望将对象解构给几个变量,就需要为该类定义几个componentN()方法,且该方法需要使用operator修饰
kotlin
fun main() {
var user = User("yeeku","668899",29)
//将User对象解构给2个变量
//只利用user对象的component1()和componet2()方法
var (name,pass:String) =user
println(name)
println(pass)
//将User对象解构给3个变量
//利用user对象的component1()、component2()方法
var(name2,pass2,age)=user
println(name2)
println(pass2)
println(age)
}
class User(name: String ,pass:String,age:Int){
var name=name
var pass =pass
var age = age
//定义operator修饰的componentN方法,用于解构
operator fun component1() :String{
return this.name
}
operator fun component2() :String{
return this.pass
}
operator fun component3() :Int{
return this.age
}
}
在某些时候程序希望解构的对象后面几个componentN()方法的返回值、忽略前几个componentN()方法的返回值、此时可通过下划线(_)来占位。例如如下代码
kotlin
var (_,pass3,age2)=user
println(pass3)
println(age2)
除此之外也可以使用这种解构的方法便利map
kotlin
for((key,value) in map){
//使用key、value
}