Kotlin:面向對象編程細節

object

天然的單例

  1. 語法含義:將類的聲明和定義該類的單例對象結合在一起(即通過object就實現了單例模式)
object List {
    fun method(){
        println("天然的單例")
    }
}

  1. 即將class關鍵字替換爲object關鍵字,來聲明一個類,與此同時也聲明它的一個對象。

  2. 也可以定義在一個類的內部


class List {

    object List {
        fun method() {
            println("天然的單例")
        }
    }
}

伴生對象

(1)、在Kotlin中是沒有static關鍵字的,也就是意味着沒有了靜態方法和靜態成員。那麼在kotlin中如果要想表示這種概念,取而代之的是包級別函數(package-level function)和我們這裏提到的伴生對象。

package oop

class Son{
    companion object {
        val age = 22
    }
}

fun Son.Companion.foo() {
    println("age = $age")
}

fun main(args:Array<String>) {
    Son.foo()
}

伴生對象也可以聲明在一個類的內部,使用如下的方式調用

class Object{
    companion object myObject {
        val tmp = 1
        
        fun method() {
            println("i am in companion object")
        }
    }
}
fun main(args:Array<String>) {
    Object.method()
    Object.myObject.method()
    
}

(2)、在類體外調用class.compaion 的方式爲伴生對象聲明一個函數

package oop

class student{
    companion object {
        val age = 22
    }
}

fun student.Companion.foo() {
    println("age = $age")
}

fun main(args:Array<String>) {
    student.foo()
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章