(新) Kotlin搞起來 —— 4.類與對象

標簽: Kotlin


1.Any類

我們都知道Java中每個類都有一個Object的默認父類,在Kotlin中也有,但是不是Object,
而是 Any 類,雖說都是所有類的共同父類,但是類組成卻是不一樣的,對比下就知道了:

??????

2.類定義與對象實例化

Kotlin中不同于Java,允許在一個文件中定義多個類,另外,類實體是可選的,就是直接
class Test 這樣,對的不用疑惑,可以不寫大括號,當然這個一般用于表示概念(沒什么
卵用)。而實例化類對象以及調用成員方法也很簡單:

??????

這里設置對象屬性Name,其實是調用了自動生成setName()方法,對了,你
還可以自定義屬性的getter和setter方法,做一些過濾或者一些附加操作,例如:

然后這里有個坑,就是如果你寫成get() = trueHeight,會不停調用自身,然后OOM
網上有人說在前面加個$,但實測不行,如果有解決方案的務必告知我!
另外,你還可以再get和set方法前加 private,這樣可以禁止外部調用!


3.構造器(構造方法)

Kotlin中的構造器分為三種:

主構造器

規矩如下

  • 1.如果一個非抽象類沒有聲明任何主次構造器,那么會默認生成一個public 無參的主構造器
  • 2.一個類只有一個主構造器類頭部的一部分,在類名后constructor(參數列表)
  • 3.主構造器中不能包含任何代碼,如果想寫一些初始化代碼,可以寫到init初始化代碼塊中

?
使用示例如下

輔助構造器

規矩如下

  • 1.寫在類中,可以有一個或者多個,用constructor關鍵字標識
  • 2.可以通過this()調用其他輔助構造器,但是任何一個輔助構造器都必須調用主構造器

?
使用示例如下

私有主構造器

其實就是在主構造器前加上一個private,然后就只能通過輔助構造器實例化對象

使用示例如下


4.繼承

上一節常識那里也說了,Kotlin中繼承父類或者實現接口,直接用 : 引號,如果有多個
可以用逗號隔開;另外上一節看對應的Java代碼我們知道了類的默認修飾符是: public final
意味著這個類是不能改變的,如果你想進行一些重寫的話,你需要在class前添加一個 open 關鍵字,
子類構造方法需要實現父類構造方法,而方法的修飾符也是final的,重寫某個方法,同樣需要在
方法前加上open關鍵字,而且重寫的方法前還需加上override關鍵字;還有,你可以用 super
關鍵字來調用父類中的方法,這一點和Java中是一樣的。

使用示例如下


5.接口

Kotlin中的接口類似于Java8,支持抽象方法抽象屬性,還支持包含實現的方法
接口與其中的方法默認open 的和Java一樣使用 interface 聲明!

接口與抽象類的區別在于:接口不能存儲狀態數據,可以擁有屬性,但是這些屬性必須
是抽象的,或者提供訪問器的自定義實現!

使用示例如下

另外,如果一個需要實現的類或接口中包含同名方法,可以使用<>來指明調用的是哪個
父類方法!比如:


6.抽象類

和接口類似,默認是open的,但是對于抽象成員,需要使用 abstract 關鍵字聲明!

使用示例如下


7.內部類,匿名內部類的創建

類可以嵌套在其他類中,如果只是簡單的嵌套,內部類是無法訪問外部類成員的
如果你想在內部類中訪問外部成員,你需要使用 inner 關鍵字進行聲明。

使用示例如下:

另外匿名內部類,Kotlin中會自動轉成lambda表達式的形式,比如設置點擊事件:

Java中:

Kotlin中:

因為OnClickListener匿名內部類中只有一個onclick方法,可以省略,如果是有
多個方法需要重寫的匿名內部類,則要使用object關鍵字了,例子如下:


8.單例對象

Kotlin中 沒有靜態屬性和方法,如果你想實現類似于單例的功能
你可以使用關鍵字 object 聲明一個對象,對象的構造器不能提供構造器參數
在第一次使用的時候會被初始化,可用于提供常量或共享不可變對象

使用示例如下:


9.伴生對象

除了上面的單例對象外,Kotlin 中還提供了伴生對象這種東西,使用 companion關鍵字聲明,
可以直接 類.成員 訪問成員,有點類似與靜態成員,但是在運行時,他們依舊是實體的實例成員,
另外,使用companion關鍵字時,伴生對象的名稱可以省略

使用示例如下

當然可能有一些強迫癥患者硬是要用靜態成員靜態方法的話,你可以用下述關鍵字:

靜態成員

  • @JvmField 注解:生成與該屬性相同的靜態字段
  • lateinit 關鍵字:延遲初始化,上一節定義空變量講了~
  • const 關鍵字:將 Kotlin 屬性轉換成 Java 中的靜態字段(定義常量用)

靜態方法

  • @JvmStatic 注解:在單例對象和伴生對象中生成對應的靜態方法

使用示例如下


10.數據類

就是只表示數據的類,用 data 進行聲明,默認基于構造方法中實現了:
toString(), componentN(), copy(), equals() 和 hashCode() 方法,
另外,不在構造方法中定義的屬性不會產生在toString()的結果中!
Data類可以直接使用 == 進行比較。

使用示例如下


11.枚舉類

Kotlin中的枚舉與Java中基本類似,用 enum 聲明為枚舉類
最基本的用法是實現類型安全的枚舉,比如,要你表示周一到周日,大部人會使用1-7,
如果出現了異常情況,用戶輸入了0或者8,枚舉可以看做對輸入的數據類型做了限制
只能是枚舉中的某一個,從而實現了所謂的類型安全。

使用示例如下

???? 輸出

除此之外,你還可以通過valueOf("名字")類匹配或者values()拿到一個Array,
然后進行遍歷~


12.封閉類

用于限制類的層次結構,值只能是集合中的類型,不可以是其他任何類型,
可以理解成 "擴展的枚舉類",但與枚舉有些不同:
枚舉中的實例唯一的,而封閉類可以有很多實例,他們可以有不同的狀態,
使用關鍵字 sealed 聲明(內部的類都是本身的子類)另外該關鍵字不能修飾接口或抽象類,會報
waring,但不會出現編譯錯誤。另外有一點要區分:
直接子類必須都寫在封閉類中!!! 封閉類子類的擴展可以在任何地方而無需在同一個文件中
使用密封類的最主要的的好處體現在你使用 when 表達式,可以確保聲明可以覆蓋到所有的情形,不需要再使用
else 情形。

PS:在Kotlin 1.1中允許使用data數據類繼承!

使用示例如下


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容