Kotlin類(lèi)的繼承實(shí)現(xiàn)詳細(xì)介紹
1.在kotlin中,默認(rèn)類(lèi)都是封閉的closed的。如果要讓某個(gè)類(lèi)開(kāi)放繼承,必須用open關(guān)鍵字修飾
類(lèi)中的方法默認(rèn)也是關(guān)閉的。如果需要子類(lèi)復(fù)寫(xiě)父類(lèi)的方法,也必須用open修飾。
1)定義父類(lèi),用open將類(lèi)繼承打開(kāi)。用open將函數(shù)的復(fù)寫(xiě)打開(kāi)。
//父類(lèi)必須用open修飾,才能夠被繼承 open class Person(val name:String) { var age = 0 //父類(lèi)定義的函數(shù),必須有open修飾,子類(lèi)才能復(fù)寫(xiě) open fun doWork(){ println("do nothing") } }
2)定義子類(lèi)。屬性是不需要open字段修飾的。子類(lèi)默認(rèn)繼承父類(lèi)的屬性
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ì)象的類(lèi)型。
val student = Student("HanMei") println(student is Student) println(student is Person) println(student is Any)
Java中用 instanceof 來(lái)檢查某個(gè)對(duì)象的類(lèi)型。
Student student = new Student(); System.out.println(student instanceof Student); System.out.println(student instanceof Person);
3.在kotlin中存在一個(gè)超類(lèi)Any。所有的類(lèi)都他的子類(lèi)。就向Java中的Object超類(lèi)一樣。
Any類(lèi)中也定義了和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 }
在定義的子類(lèi)中,可以復(fù)寫(xiě)這些方法
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è)類(lèi)型轉(zhuǎn)換操作符??梢詫⒆宇?lèi)類(lèi)型轉(zhuǎn)換成父類(lèi)、抽象類(lèi)接口。
定義一個(gè)方法,接收父類(lèi)類(lèi)型。
fun sayHello(p: Person) { println("Hello," + p.name) }
由于類(lèi)的多態(tài),我們可以直接把子類(lèi)類(lèi)型賦值給父類(lèi)類(lèi)型。
也可以通過(guò)as字段轉(zhuǎn)換成父類(lèi)類(lèi)型,通常我們不這樣做。
val student = Student("HanMei") sayHello(student) sayHello((student as Person))
到此這篇關(guān)于Kotlin類(lèi)的繼承實(shí)現(xiàn)詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Kotlin類(lèi)的繼承內(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基類(lèi)流程詳解
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-03Android?DialogFragment使用之基類(lèi)封裝
這篇文章主要介紹了Android?DialogFragment使用之基類(lèi)封裝示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(三)
這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android開(kāi)發(fā)使用Drawable繪制圓角與圓形圖案功能示例
這篇文章主要介紹了Android開(kāi)發(fā)使用Drawable繪制圓角與圓形圖案功能,結(jié)合具體實(shí)例形式分析了Drawable繪制圓角矩形的實(shí)現(xiàn)步驟與使用方法,需要的朋友可以參考下2017-10-10