Kotlin 類

Kotlin 和 Java 兼容迅脐, 面向?qū)ο蟮南嚓P(guān)概念一致, 類的定義豪嗽、繼承谴蔑、成員等和 Java 區(qū)別不大豌骏,Kotlin 的寫法比 Java 簡潔一些。類中可包含函數(shù)隐锭、屬性窃躲、內(nèi)部類、伴隨對象钦睡。

class Persion constructor(firstName: String) {
    private val name = firstName
    fun main() {...}
}
  • 構(gòu)造器和初始化

Kotlin 構(gòu)造器關(guān)鍵字 constructor 聲明蒂窒, 如果沒有可見性、注解等修飾荞怒,可省略 constructor洒琢。和 Java 具有構(gòu)造函數(shù)不一樣, Kotlin的構(gòu)造器只有聲明褐桌, 初始化代碼可放到 init 塊衰抑。

class Persion(nameValue: String, ageValue: Int) {
    private val name: String
    private val age: Int
    init {
        name = firstName
        age = if (ageValue > 0 && ageValue < 150) ageValue else 1
    }
}

Java 可以為類定義多個構(gòu)造函數(shù), Kotlin 也可以荧嵌, 但不一樣的是呛踊, Kotlin 的構(gòu)造器有主次之分。Kotlin只有一個主構(gòu)造器完丽,如上代碼所示就是主構(gòu)造器恋技, 次級構(gòu)造器必須直接或者間接調(diào)用主構(gòu)造器,示例:

class Persion(val name: String, val age: Int) {
    constructor(name: String): this(name, 1)
}

主構(gòu)造器不能帶函數(shù)體逻族,次級構(gòu)造器可帶函數(shù)體蜻底。如果主構(gòu)造器沒有參數(shù),可省略聘鳞,編譯器會自動生成無參構(gòu)造器薄辅。

class Persion {
    private var name: String? = null
    contructor(name: String) {
        this.name = name
    }
    init {
        // do something
    }
}
  • 繼承

Kotlin 類可以繼承 open 的類和接口, 如果沒有繼承抠璃,默認繼承 Any站楚, Any 相當于 Java 的 Object 類, 是所有類的基類搏嗡。

和 Java 不同窿春, Kotlin 類默認是 final 的, 要允許被繼承采盒,需要顯式聲明為 open旧乞,抽象類默認是 open 的。
類的方法也類似磅氨, 允許被重載需要 open 聲明尺栖。

open class Base {
    open fun v() {...}
}

abstract class Davad: Base() {
    abstract fun f()
    fun h() {...} // 不能被重載
}

class Hello: Davad() {
    @override
    fun f() { ... }
    @override
    fun v() {
        super.v()
        ...
    }
}
  • 嵌套類和內(nèi)部類

Java里面, 默認的嵌套類是內(nèi)部類烦租,可以訪問外部類的成員延赌。 但是嵌套類有 static 修飾時除盏, 就不是內(nèi)部類,只是嵌套類挫以。

Kotlin 的語法有點不一樣者蠕, 默認只是嵌套類, 內(nèi)部類要用 inner 聲明屡贺。

class Outer {
    private val x = 10
    inner class Inner {
        fun f() = x * x
    }
}

內(nèi)部類訪問 this 通過限定符 this@Outer

  • 匿名內(nèi)部類

Kotin 的匿名內(nèi)部類和 Java 的語法上有點不一樣蠢棱,示例:

val listener = object : OnItemClickListener() {
    override fun onSimpleItemClick(adapt: BaseQuickAdapter<*, *>, view: View, position: Int) {
        // do something
    }
}
  • 數(shù)據(jù)類

經(jīng)常會創(chuàng)建一些數(shù)據(jù)類, 什么功能也沒有, 而僅僅用來保存數(shù)據(jù)。某些常見的功能經(jīng)乘φ唬可以由類中保存的數(shù)據(jù)內(nèi)容即可自動推斷得到。
data class User(val name: String, val age: Int)
編譯器會根據(jù)主構(gòu)造器中聲明的全部屬性, 自動推斷產(chǎn)生以下成員函數(shù): equals(), toString(), copy() 等糕再。

  • 枚舉類

枚舉類的定義量没,和 Java 類似, 也可以帶定義帶參數(shù)的構(gòu)造器

enum class Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}

enum class Code(val code: Int, val msg: String) { SUCESS(0, "sucess"), FAIL(-1, "fail")}

參考
《Programming Kotlin》Stephen Samuel 突想,Stefan Bocutiu
《Kotlin in Action》Dmitry Jemerov殴蹄,Svetlana Isakova

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猾担,隨后出現(xiàn)的幾起案子袭灯,更是在濱河造成了極大的恐慌,老刑警劉巖绑嘹,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽荧,死亡現(xiàn)場離奇詭異,居然都是意外死亡工腋,警方通過查閱死者的電腦和手機姨丈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擅腰,“玉大人蟋恬,你說我怎么就攤上這事〕酶裕” “怎么了歼争?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渗勘。 經(jīng)常有香客問我驼唱,道長,這世上最難降的妖魔是什么诞仓? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任幕与,我火速辦了婚禮,結(jié)果婚禮上价淌,老公的妹妹穿的比我還像新娘申眼。我一直安慰自己瞒津,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布括尸。 她就那樣靜靜地躺著巷蚪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪濒翻。 梳的紋絲不亂的頭發(fā)上屁柏,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音有送,去河邊找鬼淌喻。 笑死,一個胖子當著我的面吹牛雀摘,可吹牛的內(nèi)容都是我干的裸删。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼阵赠,長吁一口氣:“原來是場噩夢啊……” “哼涯塔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起清蚀,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤匕荸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后枷邪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榛搔,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年齿风,在試婚紗的時候發(fā)現(xiàn)自己被綠了药薯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡救斑,死狀恐怖童本,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脸候,我是刑警寧澤穷娱,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站运沦,受9級特大地震影響泵额,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜携添,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一嫁盲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烈掠,春花似錦羞秤、人聲如沸缸托。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俐镐。三九已至,卻和暖如春哺哼,著一層夾襖步出監(jiān)牢的瞬間佩抹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工取董, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棍苹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓甲葬,卻偏偏與公主長得像廊勃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子经窖,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來 Kotlin 梭灿,快速學習Kotlin画侣! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,172評論 9 118
  • 原文地址 Classes 類在Kotlin中使用class關(guān)鍵字被聲明 類聲明由類名和類頭組成(指定它的類型參數(shù)堡妒,...
    CyrusChan閱讀 604評論 0 3
  • 類的聲明 同Java配乱、Python等一樣,Kotlin使用class關(guān)鍵字來聲明一個類皮迟。 創(chuàng)建一個對象實例: Ko...
    CoorChice閱讀 3,415評論 2 4
  • 昨天的5.20,有多少小伙伴不敢瞧一眼自己的朋友圈爆阶?各種秀"恩愛"燥透,簡直是單身狗們心里難以承受之重。520元的紅包...
    思念八都閱讀 874評論 0 0
  • 9月開始除了在門診部的辨图,我已經(jīng)做了11次按摩個案了班套,每一次的勞動都讓我覺得心情愉悅!雖然身體有些累故河!但是累完卻很容...
    竺子閱讀 171評論 0 0