Kotlin中級(5)- - - 初識Kotlin中的物件
版權宣告:本文為博主原創文章,轉載請標明出處。https://blog.csdn.net/lyhhj/article/details/82805412
萬物皆物件
物件就是類的例項化
用Kotlin描述物件
class Friend{ var name: String = "" var hairColor: String = "" ..... }
愉快的構造
1.主建構函式:
class Friend constructor(val name: String,val age: Int){}
主構造二
下面這種構造純粹的傳值,並不在這裡定義屬性
主構造裡不能包含任何程式碼,Kotlin提供了初始程式碼塊init
class Friend constructor(name: String, age: Int) { val name: String = name val age: Int = age init{ } }
次建構函式體寫在Friend類定義的大括號中,也就是程式碼塊中。而且在次建構函式的定義時,constructor這個關鍵字是必不可少的。
class Friend { val name: String val age: Int constructor(name: String, age: Int) { this.name = name this.age = age } }
主構造和次構造可以並存麼?當然可以。但是如果類有一個主建構函式,那麼每個次建構函式都需要委託給主建構函式。也就是說,次建構函式在最後還是要用到主建構函式。
class Friend(name: String,age: Int) { val name: String = name val age: Int = age var parent: Friend? = null constructor(name: String, age: Int,child: Friend): this(name,age) { child.parent = this } }
一旦有了修飾符,主建構函式的constructor關鍵字就不能省略了
函式作為屬性
class Number(val a: Int, val b: Int, var operator: (Int, Int) -> Int) { fun operatoion() { println(operator(a, b)) } } fun test() { val num = Number(2, 3, { x, y -> x + y }) num.operatoion() num.operator = { x, y -> x * y } num.operatoion() }
在這段程式碼中我們定義的iperator屬性為函式型別,(Int,Int)-> Int表示為引數為兩個Int型別,返回值為一個Int型別。當然這裡沒有引數名哦。我們把這個函式屬性定義為變數是為了可以日後進行改變以進行來個數的新的操作,在方法operation中,我們執行了這個函式,當然,一個屬效能夠當成函式來執行是不是很神奇呢?這就是Kotlin函數語言程式設計的魅力!
gettter()、setter()
class Person(age: Int){ var age = age val isAdult: Boolean get() = age >= 18 }
get()是自定義getter的標識,當我們從外部需要訪問這個屬性的值的時候,它會呼叫內部的getter把值傳給我們。
class Person(age: Int){ var age = age val isAdult: Boolean get() = age >= 18 var addAge: Int get() = 0 set(value){ age += value } }
setter是給在外部的屬性賦值,通過var的定義,我們可以設定set(value){}自定義setter。當然,如果一個屬性要自定義setter,也必須自定義它的getter