- 構造函數
- 訪問修飾符
- 伴生對象
- 單例類
- 動態代理
- kotlin中特有的類
09:kotlin的構造函數
kotlin的類默認是public final的,如果想去final,則需在class前加open關鍵字
class MainActivity : AppCompatActivity()
class MainActivity : AppCompatActivity(),View.OnClickListener
接口和父類無先後關係,父類後顯示的寫小括號表示,調用父類無參的構造方法。
如果MainActivity中沒有實現構造方法,父類後的小括號可以省略
//跟在類名後面的是主構造函數
class AActivity(var int :Int) : AppCompatActivity(){
//init是主構造函數的代碼塊
init {
println("主構造函數的代碼塊")
}
//這是次構造函數
constructor()
}
10:伴生對象
【internal】訪問修飾符
kotlin除了有private,protected,public還有一個internal。
只能同個模塊(Module)下訪問。
伴生對象compaion object
class StringUtils {
companion object {
fun isEmpty(str: String): Boolean {
return "" == str
}
}
}
fun main() {
//kotlin code
StringUtils.isEmpty("")
//java code
StringUtils.Companion.isEmpty("")
}
用伴生對象聲明單例
class Single private constructor() {
companion object {
fun get(): Single {
return Holder.instance
}
}
private object Holder{
val instance = Single()
}
}
fun main() {
Single.get()
}
11:by關鍵字的作用
動態代理
interface Animal{
fun bark()
}
class Dog : Animal{
override fun bark() {
println("wang")
}
}
class Zoo(animal:Animal):Animal by animal
fun main() {
Zoo(Dog()).bark()
}
kotlin會將動態代理編譯後變爲靜態代理,所以比java的動態代理效率高,java的動態代理本質上是通過反射,而kotlin動態代理本質上是通過靜態代理去調用的。