1.主构造函数
package Kotlin.Stage4
//主构造函数,规范来说,都是增加_xxx的形式,临时的输入类型,不能直接用。需要接收下来,成为变量才能用。
class TestBase(_name:String,_sex:Char,_age:Int,_info:String){ //主构造函数var name=_nameget() = field //get不允许私有化private set(value) { //私有化的set在调用时 不能访问,无法setfield=value}val sex=_sexget() = field//set(value){} 由于是只读val的 因此无法使用set函数var age=_ageget() = field +1var info=_infoget() = "【$field】"fun show(){//println(_name) _name临时输入类型 不能直接用,需要接收才能用println(name)println(sex)println(age)println(info)}
}fun main() {//创建对象var p=TestBase(_name = "kotlin",_age = 20,_sex = '男',_info = "我是语言")p.show()
}
执行结果
类似java中的this.nam=name
2.主构造函数里面定义属性
优化上述构造,一步到位
package Kotlin.Stage4class TestBase1(var name:String,val sex:Char,var age:Int, var info:String){ //主构造函数fun show(){println(name)println(sex)println(age)println(info)}
}fun main() {//创建对象var p=TestBase1(name = "kotlin",age = 20,sex = '男',info = "我是语言")p.show()
}
执行结果
3.次构造函数
constructor()
package Kotlin.Stage4
class TestBase3(name:String){ //主构造//次构造函数必须调用主构造,否在会报错。主构造统一管理,为了更好的初始化//2个参数的次构造constructor(name: String,sex:Char):this(name){println("2个参数的次构造函数:name=$name,sex=$sex")}constructor(name: String,sex: Char,age:Int):this(name){println("3个参数的次构造函数:name=$name,sex=$sex,age=$age")}constructor(name: String,sex: Char,age:Int,info:String):this(name){println("3个参数的次构造函数:name=$name,sex=$sex,age=$age,info=$info")}
}fun main() {//调用主构造TestBase3("java")//调用次构造TestBase3("kotlin",'m')TestBase3("kotlin",'m',25)TestBase3("kotlin",'m',25,"我是语言")}
执行结果
4.构造函数默认参数
如果用户不传入参数,可以直接使用默认值
package Kotlin.Stage4class TestBase4(name:String="java"){ //主构造//次构造函数必须调用主构造,否在会报错。主构造统一管理,为了更好的初始化//2个参数的次构造constructor(name: String="kotlin",sex:Char='w'):this(name){println("2个参数的次构造函数:name=$name,sex=$sex")}constructor(name: String="c",sex: Char='m',age:Int=25):this(name){println("3个参数的次构造函数:name=$name,sex=$sex,age=$age")}constructor(name: String="c++",sex: Char='m',age:Int=35,info:String="我是语言"):this(name){println("3个参数的次构造函数:name=$name,sex=$sex,age=$age,info=$info")}fun show(){println("主构造函数调用结果")}
}fun main() {//调用主构造TestBase4("java")//调用次构造TestBase4("kotlin",'m')TestBase4("kotlin",'m',25)TestBase4("kotlin",'m',25,"我是语言")//上述传入参数会覆盖默认参数TestBase4().show() //此种情况下会优先调用主构造
}
执行结果