类的声明
使用class+类名来声明,若类体中无内容,类体后的花括号可以省略
class T {
}
class T1
构造函数
在kotlin中,有三种构造函数的类型
- 主构造函数
在类名后添加括号,写明主构造函数的参数列表,就像是函数一样,在这条件下,类型在创建时,就会直接床架成员变量并为其赋值
调用输出class T(var a:Int,var b:Int) { }
输出var t = T(1,2) println(t.a) println(t.b)
1 2 ```
- 带init初始化的形式
由于主构造参数的形式时不能有代码的参与的,只是默认的赋值,而在初始化中的代码操作则需放在init块中。在有了init快的情况下,无论何种构造方式,都会调用init块。
输出class T(var a:Int,var b:Int) { init { println("${a},${b}") } } fun main() { var t = T(1,2) println(t.a) println(t.b) }
1,2 1 2
- 次构造函数
这种方式很灵活,也比较复杂。
采用constructor(形参列表):this(){/**/}的形式来书写
当没有主构造参数是,需要现在类体内添加成员变量,无法在形参列表内使用var关键字来创建成员变量。
输出class T2(){ var a:Int = 0; var b:Int = 0; constructor(a:Int, b: Int) : this() { this.a = a this.b = b; println("${this.a},${this.b}") } }
当有主构造函数时,此时构造体的小括号内可以包含主函数的参数,也可以不包含,在this中,要将主函数的所有参数都写入。当你的构造函数的括号内,包含了部分主函数的参数时,在this的小括号中,要将以使用的参数名写上,而未使用的参数则要使用附默认值的形式,给予其直。1,2
class Box(var height: Double,var weight:Double): Shape() { var r = 0.0 init{ this.height = height this.weight =weight this.volumn = weight*weight*height println("执行init") } constructor(height: Double) : this(height, weight = 1.0) { } constructor(height: Double,weight: Double,r:Double):this(height,weight){ this.r = r } }