<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 1. 類的定義 類的定義和`Java`中類似,比如下面的案例: ~~~ class Person { private var name: String? = null private var age: Int? = null constructor(){ this.name = "張三" this.age = 20 } constructor(name: String, age: Int) { this.name = name this.age = age } override fun toString(): String { return "Person(name=$name, age=$age)" } } fun main() { var person: Person = Person() println(person) } ~~~ 結果: ``` Person(name=張三, age=20) ``` 需要注意的是,上面的兩種構造函數的寫法都是**次構函數**。`constructor`關鍵字定義,只不過次構函數位于類體中。對應的還有一類叫做**主構函數**,如下: ~~~ class Person constructor(){ private var name: String? = null private var age: Int? = null init { this.name = "張三" this.age = 20 } override fun toString(): String { return "Person(name=$name, age=$age)" } } ~~~ 從上面的案例可以看出,**主構函數**定義在類聲明的這一行代碼,且需要結合`init`代碼塊進行執行。不妨在下一個案例中我們將主構函數和次構函數均定義在類中: ~~~ class Person constructor(){ private var name: String? = null private var age: Int? = null init { this.name = "張三" this.age = 20 } constructor(name: String, age: Int): this() { this.name = name this.age = age } override fun toString(): String { return "Person(name=$name, age=$age)" } } fun main() { var person: Person = Person("李四", 23) println(person) } ~~~ 需要注意的是,在次構函數定義的時候,次構造函數必須調用主構造函數,也就是`次構函數:this(參數列表)`。 # 2. 繼承 - 如果想聲明一個類繼承另一個類,則需要使用英文冒號“`:`”; - `Kotlin`中的所有類都默認使用`final`關鍵字修飾,不能被繼承,因此,當繼承某個類時,需要在這個類的前面加上`open`關鍵字; 比如下面的案例: ~~~ open class Person constructor(){ protected var name: String? = null protected var age: Int? = null init { this.name = "張三" this.age = 20 } constructor(name: String, age: Int): this() { this.name = name this.age = age } override fun toString(): String { return "Person(name=$name, age=$age)" } } class Student constructor(name: String, age: Int): Person() { init { this.name = name this.age = age } } fun main() { var person: Student = Student("李四", 23) println(person) } ~~~ 結果: ``` Person(name=李四, age=23) ``` 但是我們期望最終輸出的信息為`Student`的信息,故而這里我們需要對`toString`進行重寫。在`Kotlin`中被重寫的屬性或者方法前邊需要使用“`override`”關鍵字標識。且在父類中需要被重寫的屬性和方法前面必須使用`open`關鍵字來修飾。比如: ~~~ open class Person constructor(){ protected open var name: String? = null protected var age: Int? = null init { this.name = "張三" this.age = 20 } constructor(name: String, age: Int): this() { this.name = name this.age = age } open override fun toString(): String { return "Person(name=$name, age=$age)" } } class Student constructor(name: String, age: Int): Person() { protected override var name: String? = null init { this.name = name this.age = age } override fun toString(): String { return "Student(name=$name, age=$age)" } } fun main() { var person: Student = Student("李四", 23) println(person) } ~~~ # 3. 嵌套類 嵌套類和`Java`中內部類類似,但是該類不能訪問外部類的成員,內部類指的是可以用`inner`標記以便能夠訪問外部類的成員。 # 4. 枚舉類 比如: ~~~ enum class Option{ GET, PUT, DELETE } ~~~ 當然可以寫一個構造函數,并設置對應的值: ~~~ enum class Option(number: Int){ GET(0), PUT(1), DELETE(2) } fun main() { var opt = Option.PUT println(opt.name) println(opt.ordinal) } ~~~ 結果: ``` PUT 1 ``` # 5. 數據類 在`Java`程序中,一般會用一些類來保存一些數據或者對象的狀態,習慣上將這些類稱為`bean`類或`entity`類或`model`類。在`Kotlin`中,專門處理這些數據的類被稱為數據類,用關鍵字`data`進行標記。需要注意的是: - 數據類中的主構造函數中傳遞的參數必須用`val`或`var`來修飾。 - 數據類不可以用`abstract`、`open`、`sealed`或`inner`關鍵字來修飾。 - 數據類的主構造函數至少有一個參數,如果需要一個無參的構造函數,可以將構造函數中的參數都設置為默認值。 ~~~ data class Option(var number: Int){ } fun main() { var opt = Option(2) println(opt) // Option(number=2) println(opt.number) // 2 } ~~~ # 6. 單例類 在`Kotlin`中,單例模式是通過`object`關鍵字來完成的,通過`object`修飾的類即為單例類,單例類在程序中有且僅有一個實例。 ~~~ object Singleton{ var name = "Hello" fun getName(){ println(name) } } fun main() { Singleton.getName() //Hello } ~~~ 這里沒有創建`Singleton`對象的實例,而是采用類似`Java`中靜態方法的調用。且注意到這里使用`object`關鍵字修飾即可,不需要`Java`中那么麻煩。 > 直接通過“類名.成員名”的形式調用類中的屬性與函數,不需要創建該類的實例對象,這是因為通過object關鍵字創建單例類時,默認創建了該類的單例對象。 # 7. 伴生對象 在`Kotlin`中沒有靜態變量,取而代之的是伴生對象。伴生對象是在類加載時初始化,生命周期與該類的生命周期一致。 定義伴生對象是通過“`companion`”關鍵字標識的,由于每個類中有且僅有一個伴生對象,因此也可以不指定伴生對象的名稱,并且其他對象可以共享伴生對象。 在調用伴生對象時分兩種情況,具體如下。 (1)有名稱:調用方式為“`類名.伴生對象名.成員名`”或“`類名.成員名`”。 (2)無名稱:調用方式為“`類名.Companion.成員名`”或“`類名.成員名`”。 比如: ~~~ class Person{ var name = "Hello" companion object UUID{ fun generateUUID(): Int { return LocalDateTime.now().second } } fun getName(){ println("UserName:${name}, UUID: ${Person.UUID.generateUUID()}") } } fun main() { Person().getName() } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看