<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 類的定義 在面向對象的思想中最核心的就是對象,為了在程序中創建對象,首先需要定義一個類。在定義類時需要使用“class”關鍵字聲明。 類是對象的抽象,它用于描述一組對象的共同特征和行為。類中可以定義成員變量和成員函數,其中成員變量用于描述對象的特征,也被稱作屬性,成員函數用于描述對象的行為,可簡稱為函數或方法。 ``` class Person{ //成員屬性 private val name = "" private val age = 0 //成員方法 private fun sayHello() { println("我叫${name},我今年${age}歲。") } } ``` ## 類方法和屬性的定義 Kotlin定義類、類的成員、類的成員方法和Java很類似。我們通過IDEA提供的java文件轉kt文件的功能,直觀感受下kotlin定義類和Java定義類的區別。 假設我們有一個Person類,包含name屬性和age屬性,以及一個printInfo方法,假如我們通過如下Java代碼定義Person類,參考代碼: ~~~ class Person11 { //成員屬性 private String name; private int age; //成員方法 private void printInfo() { System.out.println("我是" + name + ",我今年" + age); } } ~~~ 通過IDE的轉換工具,將Java代碼轉換為kotlin代碼,如下所示 ~~~ internal class Person1 { //成員屬性 private val name: String? = null private val age: Int = 0 //成員方法 private fun printInfo() { println("我是$name,我今年$age") } } ~~~ 通過這個轉換,Kotlin也有private修飾符,Kotlin的成員屬性還必須要初始化。 再比如,假如我們通過如下Java代碼定義Person類,參考代碼: ~~~ class Person2 { //成員屬性 private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } private void printInfo() { System.out.println("我是" + name + ",我今年" + age); } } ~~~ 通過IDE的轉換工具,將Java代碼轉換為kotlin代碼,如下所示 ~~~ internal class Person2 { //成員屬性 var name: String? = null var age: Int = 0 private fun printInfo() { println("我是$name,我今年$age") } } ~~~ 通過轉換結果分析,kotlin默認實現了getter和setter方法,屬性和方法的默認修飾符是public。 再比如,假如我們通過如下Java代碼定義Person類,參考代碼: ~~~ class Person33 { //成員屬性 protected String name; protected int age; //成員方法 protected void printInfo() { System.out.println("我是" + name + ",我今年" + age); } } ~~~ 通過IDE的轉換工具,將Java代碼轉換為kotlin代碼,如下所示 ~~~ internal class Person3 { //成員屬性 protected var name: String? = null protected var age: Int = 0 //成員方法 protected fun printInfo() { println("我是$name,我今年$age") } } ~~~ 通過轉換結果分析,Kotlin也有protected修飾符。 再比如,假如我們通過如下Java代碼定義Person類,參考代碼: ~~~ class Person44 { //成員屬性 public String name; public int age; //成員方法 public void printInfo() { System.out.println("我是" + name + ",我今年" + age); } } ~~~ 通過IDE的轉換工具,將Java代碼轉換為kotlin代碼,如下所示 ~~~ internal class Person4 { //成員屬性 var name: String? = null var age: Int = 0 //成員方法 fun printInfo() { println("我是$name,我今年$age") } } ~~~ 通過轉換結果分析,和Java寫法就沒有多大差異了。 ## 類對象的創建、類方法屬性的訪問 Kotlin創建類對象的時候不需要使用new關鍵字。類的方法訪問和Java訪問沒區別。類屬性訪問直接通過點號方式訪問,無需在調用getter和setter方法。參考案例: ~~~ class Person { //成員屬性 var name = "朵兒" var age = 18 //成員方法 fun printInfo(): Unit { println("我是$name,我今年${age}歲") } } fun main(args: Array<String>) { //創建對象 var person = Person() //調用方法 person.printInfo() //訪問屬性 println("姓名:${person.name}") //修改屬性 person.name = "靈兒" println("姓名:${person.name}") } ~~~ 運行結果 ``` 我是朵兒,我今年18歲 姓名:朵兒 姓名:靈兒 Process finished with exit code 0 ``` 在上述代碼中,“Person()”用于創建Person類的實例對象,“var person”則是聲明了Person類型的變量person。中間的等號用于將Person對象在內存中的地址賦值給變量person,這樣變量person便持有了對象的引用。接下來的章節中為了便于描述變量person引用的對象,通常會將該對象簡稱為p對象。在內存中變量p和對象之間的引用關系如圖所示。 ![](https://img.kancloud.cn/68/87/68873d4d754a36bf231bb5d772a1121c_955x614.png) 在創建Person對象后,可以通過對象的引用來訪問對象所有的成員,具體格式如下 ``` 對象引用.對象成員 ``` ## setter、getter(訪問器) Kotlin默認幫我們實現了setter、getter,算是setter和getter相關的第一個知識點,除此之外,我們還需要知道setter、getter自定義和setter、getter私有化。 可參考,本系列的另一篇文章[屬性與字段](http://www.hmoore.net/alex_wsc/android_kotlin/1318250#Getters__Setters_49)中講到的 Getters(讀訪問器) 與 Setters(寫訪問器)知識點 ### setter、getter自定義 Kotlin幫我們默認實現了setter和getter,我們也可以對setter和getter自定義,修改獲取和設置時候的邏輯。 比如,Student類,包含age屬性和name屬性,我們對age的setter和getter做一些簡單的自定義,參考代碼: ~~~ class Student { var name = "小芳" var age = 22 /*-----------自定義get和set------------ */ get() = 18 set(value) { //在賦值的時候提供額外操作 field = value if (value > 18) { println("${name}年齡${age},是成年人") } else { println("${name}年齡${age},是未成年人") } } } fun main(args: Array<String>) { //創建對象 var student = Student() //獲取屬性 println("${student.name}年齡${student.age}") //修改屬性 student.age = 26 } ~~~ 運行結果 ``` 小芳年齡18 小芳年齡18,是成年人 Process finished with exit code 0 ``` 我們可以看到,獲取屬性的時候,不是默認的“22”了,而是自定義的“18”。設置屬性的時候,額外的打印了是否是成年人。 ### setter私有化 kotlin中變量默認訪問修飾符是public,對應setter和getter也都是public,如果不想外界修改屬性呢?可以顯示修飾setter的訪問修飾符是private。那么在外部類中,就無法對屬性進行修改了。參考案例: ![image.png](http://upload-images.jianshu.io/upload_images/7368752-cf80ff77d877fcc9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 針對以上代碼,看到提示了“Cannot assign to ‘name’:the setter isprivate in ‘Person’。也就是,不能對name屬性賦值,因為它的setter方法是私有化的。 ?????
                  <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>

                              哎呀哎呀视频在线观看