kotlin-第三章(類與對象) 09:kotlin的構造函數 10:伴生對象 11:by關鍵字的作用

  • 構造函數
  • 訪問修飾符
  • 伴生對象
  • 單例類
  • 動態代理
  • 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動態代理本質上是通過靜態代理去調用的。

數據類
枚舉類
密閉類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章