kotlin的構(gòu)造器和java的有很大不同区丑,第一次上手可能會(huì)使很多小伙伴懵逼,
那就花15分鐘讀這篇文章橱野,弄清楚kotlin構(gòu)造器吧
導(dǎo)讀
1.主次構(gòu)造的區(qū)別
2.主次構(gòu)造的關(guān)系
3.繼承
4.init方法
1.主次構(gòu)造的區(qū)別
主構(gòu)造方法就是直接跟在類名后面的,最多1個(gè)善玫,可以沒有:
class AAA()//對,你沒看錯(cuò)“()”就是構(gòu)造方法
次構(gòu)造方法聲明在類內(nèi)水援,可以有多個(gè),也可以沒有:
calss BBB{//主構(gòu)造方法沒有聲明
constructor(){//聲明了一個(gè)次構(gòu)造器
}
}
如果主構(gòu)造和次構(gòu)造都沒有茅郎,類還是會(huì)默認(rèn)有一個(gè)無參構(gòu)造方法
2.主次構(gòu)造關(guān)系
如果有主構(gòu)造方法蜗元,
則次構(gòu)造方法必須調(diào)用主構(gòu)造方法,使用this關(guān)鍵字系冗,
例如:
class AAA(){//“()”就是主構(gòu)造方法
constructor(s:String):this(){//必須使用this調(diào)用主構(gòu)造方法
}
}
3.繼承
假設(shè)有類AAA:
class AAA(val s:String)//沒有無參構(gòu)造方法
任何類繼承自AAA時(shí)奕扣,必須調(diào)用AAA的構(gòu)造方法,
調(diào)用方式1:
class BBB(s:String) : AAA(s)
調(diào)用方式2:
calss BBB : AAA{
constructor(s:String) : super(s) {//使用": super(s)"調(diào)用父類構(gòu)造方法
}
}
4.init方法
不管是什么構(gòu)造方法掌敬,先執(zhí)行init{}惯豆,后執(zhí)行構(gòu)造方法的邏輯,
注意奔害,在主構(gòu)造聲明的參數(shù)可以在init{}中調(diào)用楷兽,次構(gòu)造的不能。
kotlin的主次構(gòu)造設(shè)計(jì)是為了減少代碼而復(fù)雜規(guī)則芯杀,有舍有得揭厚,
相比之下,我還是更喜歡java的構(gòu)造器顽染,無論是寫法還是思想,都簡單明了唧垦,蘊(yùn)含美感振亮。
end
如果你覺得這篇文章對你有所幫助坊秸,不妨點(diǎn)一個(gè)贊阶牍,作者會(huì)非常高興的走孽。