Android kotlin 類

類的定義

modifiers ("class" | "interface") SimpleName
  typeParameters?
  primaryConstructor?
  (":" annotations delegationSpecifier{","})?
  typeConstraints
  (classBody? | enumClassBody)


classModifier: 類屬性修飾符,標(biāo)示類本身特性背稼。
  abstract //抽象類標(biāo)示  
  final  //標(biāo)示類不可繼承贰军,默認(rèn)屬性
  enum  //標(biāo)示類為枚舉
  open  //類可繼承,類默認(rèn)是final的
  annotation  //注解類

accessModifier: 訪問權(quán)限修飾符
  private //僅在同一個文件中可見
  protected //同一個文件中或子類可見
  public //所有調(diào)用的地方都可見
  internal //同一個模塊中可見


1 當(dāng)Kotlin中的類需要構(gòu)造函數(shù)時蟹肘,可以有一個主構(gòu)造函數(shù)和多個次構(gòu)造函數(shù)词疼,可以沒有次構(gòu)造函數(shù)。主構(gòu)造函數(shù)在類名后帘腹。

2 默認(rèn)任何類都是基礎(chǔ)繼承自 Any (與java中的 Object 類似)贰盗,但是我們可以繼承其它類。

3 所有的類默認(rèn)都是不可繼承的(final)阳欲,所以我們只能繼承那些明確聲明 open 或者 abstract 的類:

4 抽象類---Kotlin中的抽象類允許有abstract修飾的成員方法舵盈,非抽象類不允許有抽象方法;

5 抽象類默認(rèn)是可被繼承的球化,接口是特殊的抽象類秽晚,允許有抽象方法:

open class Animal(name: String)
class Person(name: String, surname: String) : Animal(name)

函數(shù)

構(gòu)造函數(shù)

主構(gòu)造函數(shù)

1 主構(gòu)造函數(shù)不能包含任何的代碼。初始化的代碼可以放到以 init 關(guān)鍵字作為前綴的初始化塊中筒愚;

class Person(name: String){
       init{
           //初始化塊
       }
   }

2 可以直接把primary constructor中的參數(shù)直接聲明成為類的屬性赴蝇, 函數(shù)的參數(shù)聲明可以是val也可以是var,當(dāng)在主函數(shù)中聲明后可以當(dāng)做全局變量使用

class Person(var name: String)//name全局變量使用

3巢掺、當(dāng)屬性不在主構(gòu)造函數(shù)中聲明又想當(dāng)全局變量使用句伶,可在類中聲明芍耘,主函數(shù)中聲明是簡化了其寫法。

4 當(dāng)屬性不在主函數(shù)中聲明時熄阻,只能在初始化塊以及屬性聲明中使用

class Person( name: String) //name只能在初始化塊以及屬性聲明中使用

5 如果這個主構(gòu)造函數(shù)沒有任何注解或者可見的修飾符,這個constructor{: .keyword }關(guān)鍵字可以被省略倔约。否則必須保留

class Person public @Inject constructor(name: String){
}

次構(gòu)造函數(shù)

1秃殉、次構(gòu)造函數(shù)不能有聲明 val 或 var

2、如果類有一個主構(gòu)造函數(shù)(無論有無參數(shù))浸剩,每個次構(gòu)造函數(shù)需要直接或間接委托給主構(gòu)造函數(shù)钾军,用this關(guān)鍵字

class Person(){

    constructor(name: String):this() {

    }

    constructor(name: String, age: Int) : this(name) {

    }

}

3、當(dāng)沒有主構(gòu)造參數(shù)時绢要,創(chuàng)建次構(gòu)造函數(shù)時吏恭,不需要this關(guān)鍵字

class Person(){

    constructor(name: String){

    }
}

繼承

1 如果子類有主構(gòu)造函數(shù),其可以(并且必須)用(基類型的)主構(gòu)造函數(shù)參數(shù)就地初始化重罪。

2 如果類沒有主構(gòu)造函數(shù)樱哼,那么每個次構(gòu)造函數(shù)必須 使super 關(guān)鍵字初始化其基類型,或委托給另個構(gòu)造函數(shù)做到這咦點剿配。另外不同的次構(gòu)造函數(shù)可以調(diào)用基類的不同構(gòu)造函數(shù)

3 Kotlin 需要顯式標(biāo)注可覆蓋的成員(我們稱之為開放)和覆蓋后的成員搅幅,標(biāo)記為 override 的成員本是開放的,也就是說呼胚,它可以在子類中覆蓋茄唐。如果你想禁止再次覆蓋,使final 關(guān)鍵字:

open class Base {
    open fun v() {}
    fun nv() {}
}
class Derived() : Base() {
    override fun v() {}
}

4 屬性覆蓋與方法覆蓋類似蝇更,var 屬性可以覆蓋 val 屬性沪编,但反之則不行,可以在主構(gòu)造函數(shù)中使 override 關(guān)鍵字作為屬性聲明的一部分年扩。

interface Foo {
    val count: Int
}
class Bar1(override val count: Int) : Foo

5 多繼承: 如果子類從它的直接超類繼承相同成員的多個實現(xiàn)蚁廓,它必須覆蓋這個成員并提供其自己的實現(xiàn)(也許繼承來的其中之)。 為了表示從哪個超類型繼承的實現(xiàn)常遂,我們使用由尖括號中超類型名限定的 super纳令,如 super<Base> :

open class A {
    open fun f() { print("A") }
    fun a() { print("a") }
}
interface B {
    fun f() { print("B") } // 接成員默認(rèn)就是“open”的
    fun b() { print("b") }
}
class C() : A(), B {
    // 編譯器要求覆蓋 f():
    override fun f() {
        super<A>.f() // 調(diào)A.f()
        super<B>.f() //  B.f()
    }

6 與 Java 或 C# 不同,在 Kotlin 中類沒有靜態(tài)方法克胳。在多數(shù)情況下平绩,它建議簡單地使用 包級函數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漠另,一起剝皮案震驚了整個濱河市捏雌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笆搓,老刑警劉巖性湿,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纬傲,死亡現(xiàn)場離奇詭異,居然都是意外死亡肤频,警方通過查閱死者的電腦和手機叹括,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宵荒,“玉大人汁雷,你說我怎么就攤上這事”龋” “怎么了侠讯?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長暑刃。 經(jīng)常有香客問我厢漩,道長,這世上最難降的妖魔是什么岩臣? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任溜嗜,我火速辦了婚禮,結(jié)果婚禮上架谎,老公的妹妹穿的比我還像新娘粱胜。我一直安慰自己,他們只是感情好狐树,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布焙压。 她就那樣靜靜地躺著,像睡著了一般抑钟。 火紅的嫁衣襯著肌膚如雪涯曲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天在塔,我揣著相機與錄音幻件,去河邊找鬼。 笑死蛔溃,一個胖子當(dāng)著我的面吹牛绰沥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贺待,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徽曲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了麸塞?” 一聲冷哼從身側(cè)響起秃臣,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奥此,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弧哎,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年稚虎,在試婚紗的時候發(fā)現(xiàn)自己被綠了撤嫩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蠢终,死狀恐怖非洲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜕径,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布败京,位于F島的核電站兜喻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赡麦。R本人自食惡果不足惜朴皆,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泛粹。 院中可真熱鬧遂铡,春花似錦、人聲如沸晶姊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽们衙。三九已至钾怔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒙挑,已是汗流浹背宗侦。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忆蚀,地道東北人矾利。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像馋袜,于是被迫代替她去往敵國和親男旗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

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

  • 前言 人生苦多欣鳖,快來 Kotlin 剑肯,快速學(xué)習(xí)Kotlin! 什么是Kotlin观堂? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,209評論 9 118
  • Google在今年的IO大會上宣布让网,將Android開發(fā)的官方語言更換為Kotlin呀忧,作為跟著Google玩兒An...
    藍(lán)灰_q閱讀 76,866評論 31 489
  • 原文鏈接:https://github.com/EasyKotlin 在前面的章節(jié)中,我們學(xué)習(xí)了Kotlin的語言...
    JackChen1024閱讀 849評論 0 3
  • 我只用了一個晚上就讀完了這本書溃睹,燈下輕聲讀完而账!思緒如潮般翻滾皆因它,卻千頭萬緒找不到出口…… 整整二十年沒有...
    阿朵蕓閱讀 131評論 0 0
  • 我也要求你讀書用功因篇,不是因為我要你跟別人比成就泞辐,而是因為,我希望你將來會擁有選擇的權(quán)利竞滓,選擇有意義咐吼、有時間的工作,...
    清塵912閱讀 115評論 0 0