亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析Kotlin中的面向對象編程

發布時間:2020-11-20 16:51:45 來源:億速云 閱讀:174 作者:Leah 欄目:編程語言

這篇文章給大家介紹深入淺析Kotlin中的面向對象編程,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Kotlin 面向對象

深入淺析Kotlin中的面向對象編程

可以看到Kotlin中的類還是很普通的,大多與Java相似,比較特殊的有:

每一個構造函數都必須為每一個成員變量賦予初值.

primary constructor,這個構造函數的頭部緊跟在類名之后,函數體卻在類中,是由init關鍵字包含的一個代碼塊,這種函數頭和函數體分開的寫法還是很少有的,其實這兩個部分會被整合成一個構造函數,使用jd-gui反編譯class文件可以看到如下最終生成的那一個構造函數:

深入淺析Kotlin中的面向對象編程

在Kotlin中這是一個特殊的構造函數,只能定義一個而且一旦其被定義,則其他構造函數都必須調用它.

等等,好像有什么不對,這個構造函數最前面好像有兩句代碼,其實這兩句代碼是寫在成員變量的初始化值那里,最后編譯器將其塞到了init塊的起始處.如果沒有定義init塊的話,成員變量初始值代碼會被任何一個構造函數首先執行.

接下來我們看看其他的構造函數,在構造函數頭部使用this調用其他構造函數,這里我們看到了一個沒有函數體的構造函數,編譯運行都沒有錯,其實這個函數就只有一句代碼,調用了其他構造函數而已.

在這里我們看到了一個關鍵字open,open關鍵字可以用來允許一個類被繼承,沒錯,不寫open的話類默認是final的,不能被繼承.

而且同樣函數默認也是final的,不能被override,要想重寫父類函數,父類函數必須使用open定義.

不僅如此,在Kotlin中,函數參數默認也都是final的.

接下來看看繼承吧,我們為這個類定義一個子類.

深入淺析Kotlin中的面向對象編程

子類不會繼承父類的構造函數,在子類中可以使用super關鍵字調用父類函數,使用override重寫父類函數,重寫父類函數不可以降低函數可視性.

剛才我們說了,每一個構造函數都必須為每一個成員變量賦予初值,讓我們來搞一些破壞,我們在this.z被初始化之前調用show方法,show方法需要訪問this.z字段,而this.z現在還沒有初始化,那么會發生什么呢?讓我們測試一下.

深入淺析Kotlin中的面向對象編程

運行結果如下:

深入淺析Kotlin中的面向對象編程

可以看到最后輸出表示z=0,說明z被編譯器自動默認初始化為0了,然而編譯器不可能總是為你解決這些問題,假設我們的問題復雜一些,待會兒再討論.:-)

然后是多態,讓我們定義一個父類和兩個子類:

深入淺析Kotlin中的面向對象編程

深入淺析Kotlin中的面向對象編程

深入淺析Kotlin中的面向對象編程

我們各自重寫了toString函數,最后調用其show方法

深入淺析Kotlin中的面向對象編程

這兩個變量都是包含在一個Shape3D的類型中的,我們看看運行結果吧

深入淺析Kotlin中的面向對象編程

可以看到多態的實現.

現在讓我們來做一些惡作劇,我們之前說過,如果在成員變量還沒有初始化時就訪問,編譯器會自動賦予一個默認的初值給成員變量,現在我們把Triangle3D的構造函數改一下,變成這個樣子:

深入淺析Kotlin中的面向對象編程

在this.c還沒有初始化的時候調用show函數:

深入淺析Kotlin中的面向對象編程

運行結果如下:

深入淺析Kotlin中的面向對象編程

結果發生異常了,說明編譯器并不總能為你的成員變量賦予一個默認的初值.對于復雜的對象,編譯器也愛莫能助.

關于深入淺析Kotlin中的面向對象編程就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

图木舒克市| 万州区| 镇坪县| 来凤县| 从化市| 金乡县| 天全县| 信阳市| 芮城县| 襄城县| 瑞丽市| 古交市| 徐州市| 衡南县| 前郭尔| 奉贤区| 南陵县| 达日县| 玉田县| 长宁区| 渑池县| 昆山市| 绍兴县| 桦川县| 内乡县| 金乡县| 平湖市| 定州市| 多伦县| 满洲里市| 阿克陶县| 玛沁县| 明水县| 弥勒县| 苍南县| 平安县| 依兰县| 万安县| 桃江县| 台江县| 介休市|