Kotlin建構函式
阿新 • • 發佈:2019-01-22
建構函式
當Kotlin中的類需要建構函式時,可以有一個主建構函式和多個次建構函式,可以沒有次建構函式。主建構函式在類名後。
//常規用法
class Person(name: String) {
}
當主建構函式有註解或者可見性修飾符,需加 constructor 關鍵字。
class Personpublic public @Inject constructor(name: String){
}
1、主建構函式
主建構函式不能包含任何的程式碼。初始化的程式碼可以放到以 init 關鍵字作為字首的初始化塊中:
1、當在主函式中聲明後可以當做全域性變數使用
注:
1、函式的宣告可以是val也可以是var
2、當不在主建構函式中宣告又想當全域性變數使用,可在類中宣告,主函式中宣告是簡化了其寫法。
class Test(name: String){
val name = name
//。。。
}
2、當不在主函式中宣告時,只能在初始化塊以及屬性宣告中使用
2、次建構函式
1、次建構函式不能有宣告 val 或 var
2、如果類有一個主建構函式(無論有無引數),每個次建構函式需要直接或間接委託給主建構函式,用this關鍵字
class Person {
constructor() {
}
constructor(name: String ):this() {
}
constructor(name: String, age: Int) : this(name) {
}
}
class Customer(){
constructor(name: String):this() {
}
constructor(name: String, age: Int) : this(name) {
}
}
3、當沒有主構造引數時,建立次建構函式
正確使用:
class Customer{
constructor(name: String) {
}
constructor(name: String, age: Int) : this(name) {
}
}
錯誤使用:
class Customer{
//沒有主建構函式,使用委託this()錯誤
constructor(name: String) : this() {
}
constructor(name: String, age: Int) : this(name) {
}
}
3、建構函式的使用
兩種建構函式結果相同,呼叫時都可直接呼叫,或傳遞一個引數或兩個引數進行呼叫
class Test{
init{
test()
test2()
}
fun test(){
Person()
Person("李四")
Person("李四",18)
}
fun test2(){
Customer()
Customer("李四")
Customer("李四",18)
}
}