Kotlin類的繼承實(shí)現(xiàn)詳細(xì)介紹
1.在kotlin中,默認(rèn)類都是封閉的closed的。如果要讓某個(gè)類開(kāi)放繼承,必須用open關(guān)鍵字修飾
類中的方法默認(rèn)也是關(guān)閉的。如果需要子類復(fù)寫父類的方法,也必須用open修飾。
1)定義父類,用open將類繼承打開(kāi)。用open將函數(shù)的復(fù)寫打開(kāi)。
//父類必須用open修飾,才能夠被繼承 open class Person(val name:String) { var age = 0 //父類定義的函數(shù),必須有open修飾,子類才能復(fù)寫 open fun doWork(){ println("do nothing") } }
2)定義子類。屬性是不需要open字段修飾的。子類默認(rèn)繼承父類的屬性
class Student(name: String) : Person(name) { override fun doWork() { println("do homework") } } fun main() { val student = Student("HanMei") student.age = 20 println(student.name) println(student.age) student.doWork() }
2.kotlin中通過(guò)is關(guān)鍵字來(lái)檢查某個(gè)對(duì)象的類型。
val student = Student("HanMei") println(student is Student) println(student is Person) println(student is Any)
Java中用 instanceof 來(lái)檢查某個(gè)對(duì)象的類型。
Student student = new Student(); System.out.println(student instanceof Student); System.out.println(student instanceof Person);
3.在kotlin中存在一個(gè)超類Any。所有的類都他的子類。就向Java中的Object超類一樣。
Any類中也定義了和Object一樣的方法。但是在Any中都是空實(shí)現(xiàn)。真正的實(shí)現(xiàn)是由kotlin編譯器完成的。
public open class Any { public open operator fun equals(other: Any?): Boolean public open fun hashCode(): Int public open fun toString(): String }
在定義的子類中,可以復(fù)寫這些方法
class Student(name: String) : Person(name) { override fun doWork() { println("do homework") } override fun toString(): String { return "name:$name age:$age" } override fun hashCode(): Int { return super.hashCode() } override fun equals(other: Any?): Boolean { return super.equals(other) } }
4.as是一個(gè)類型轉(zhuǎn)換操作符??梢詫⒆宇愵愋娃D(zhuǎn)換成父類、抽象類接口。
定義一個(gè)方法,接收父類類型。
fun sayHello(p: Person) { println("Hello," + p.name) }
由于類的多態(tài),我們可以直接把子類類型賦值給父類類型。
也可以通過(guò)as字段轉(zhuǎn)換成父類類型,通常我們不這樣做。
val student = Student("HanMei") sayHello(student) sayHello((student as Person))
到此這篇關(guān)于Kotlin類的繼承實(shí)現(xiàn)詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Kotlin類的繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Androd 勇闖高階性能優(yōu)化之布局優(yōu)化篇
Android性能優(yōu)化方面也有很多文章了,這里就做一個(gè)總結(jié),從原理到方法,工具等做一個(gè)簡(jiǎn)單的了解,從而可以慢慢地改變編碼風(fēng)格,從而提高性能2021-10-10Android變形(Transform)之Camera使用介紹
Camera主要實(shí)現(xiàn)3D的變形,有轉(zhuǎn)動(dòng),旋轉(zhuǎn)等,Camera的源碼是由Native(本地代碼)實(shí)現(xiàn),提供的接口也比較簡(jiǎn)單,感興趣的朋友可以參考下,或許對(duì)你學(xué)習(xí)有所幫助2013-02-02Jsoup 抓取頁(yè)面的數(shù)據(jù)實(shí)例詳解
這篇文章主要介紹了Jsoup 抓取頁(yè)面的數(shù)據(jù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12Android簡(jiǎn)單封裝一個(gè)MVP基類流程詳解
MVP是從經(jīng)典的模式MVC演變而來(lái),它們的基本思想有相通的地方:Controller/Presenter負(fù)責(zé)邏輯的處理,Model提供數(shù)據(jù),View負(fù)責(zé)顯示。下面這篇文章主要給大家介紹了關(guān)于Android從實(shí)現(xiàn)到封裝MVP的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧2023-03-03Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫效果(三)
這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android開(kāi)發(fā)使用Drawable繪制圓角與圓形圖案功能示例
這篇文章主要介紹了Android開(kāi)發(fā)使用Drawable繪制圓角與圓形圖案功能,結(jié)合具體實(shí)例形式分析了Drawable繪制圓角矩形的實(shí)現(xiàn)步驟與使用方法,需要的朋友可以參考下2017-10-10