真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Kotlin繼承實例分析

本篇內(nèi)容介紹了“Kotlin繼承實例分析”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司主營社旗網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機APP定制開發(fā),社旗h5成都微信小程序搭建,社旗網(wǎng)站營銷推廣歡迎社旗等地區(qū)企業(yè)咨詢

Kotlin繼承實例分析

Kotlin中所有的類都有一個公有的超類:Any,這是所有沒有聲明超類的類的默認父類。

class Example //隱式繼承自Any

Any!=Java.lang.Object。尤其,除了equals()、hashCode()和toString()三個方法外,沒有任何成員。

為了顯式地聲明超類,語法如下:

open class Base(p:Int)  class Derived(p:Int):Base(p)

如果類具有主構(gòu)造器,則可以使用主構(gòu)造器的參數(shù)(并且必須)初始化父類。

如果類沒有主構(gòu)造器,那么每個輔助構(gòu)造器初始化時需要使用super關(guān)鍵字,或者將其委托給其他構(gòu)造器。需要注意的是,在這種情況下,不同的輔助構(gòu)造器可以調(diào)用基類的不同構(gòu)造器。

class MyView:View{  constructor(ctx:Context):super(ctx)  constructor(ctx:Context,attrs:AttributeSet):super(ctx,attrs)  }

open注解和Java的final相反:它允許其他類繼承自該類。默認的,Kotlin中所有的類是final的,也就是說不能繼承的。

覆寫方法

Kotlin總是做一些明確的事情,不像Java,Kotlin要求復(fù)寫方法時需要顯式的注解和重寫:

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

復(fù)寫Derived的v()時,ovverride注解是必須的,否則編譯器會報錯。如果沒有open注解,比如Base的nv(),那么在子類中是不能覆寫該方法的。在一個final類中(沒有open注解聲明),open成員是禁止的。也就是說final類的每個成員也都是final的。

一個標記為override的成員自身就是open的,子類仍然可以覆寫它。如果你想禁止覆寫,那么使用final

open class AnotherDerived() : Base() {     final override fun v() {         println("AnotherDerived.v")     } }

***,main()驗證多態(tài)性:

fun main(args: Array) {      var base1: Base = Base()     var base2: Base = Derived()     var base3: Base = AnotherDerived()      base1.v()     base2.v()     base3.v()  }

覆寫屬性

覆寫屬性和覆寫方法基本類似;如果子類要重新聲明父類中已經(jīng)聲明過的屬性,那么需要使用override,并且類型要兼容。每個聲明的屬性可以被具有初始化器的屬性或具有g(shù)etter方法的屬性覆蓋。

open class Foo {     open val x: Int         get() {             println("Foo")             return 3         } }  class Bar1 : Foo() {     override val x: Int = 2 }

可以使用var屬性覆蓋val屬性,反之不可以。因為val屬性基本上聲明一個getter方法,并將其替換為var,另外在派生類中聲明一個setter方法。

可以在主構(gòu)造器使用override覆蓋屬性

interface Aoo {     val count: Int }  class Aoo1(override val count: Int) : Aoo  class Aoo2 : Aoo {     override var count: Int = 0 }

覆寫準則

在Kotlin中,實現(xiàn)繼承由以下規(guī)則控制:如果類從其直接超類繼承同一成員的多個實現(xiàn),則它必須覆蓋該成員并提供自己的實現(xiàn)(可能使用其中一個繼承)。  要表示從其繼承的實現(xiàn)的超類型,可在尖括號中使用超類型名稱超級限定,例如,super。

open class A {     open fun f() {         println("A")     }      fun a() {         println("a")     }  }  //接口的方法默認open interface B {     fun f() {         println("B")     }      fun b() {         println("b")     }  }  class C() : A(), B {     override fun f() {         super.f()         super.f()         println("C")     } }

上面的代碼繼承自A和B是沒有問題的,a()和b()因為C知道繼承自哪一個類。但是對于f(),我們有兩個繼承,所以我們需要覆寫f(),并且需要提供我們的實現(xiàn)來消除歧義。

“Kotlin繼承實例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


文章題目:Kotlin繼承實例分析
文章源于:
http://weahome.cn/article/jsjjcs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部