Kotlin嵌套和內部類

嵌套類是在另一個類中創建的類。 在Kotlin中,嵌套類默認是靜態的,因此可以在不創建類對象的情況下訪問其數據成員和成員函數。 嵌套類無法訪問外部類的數據成員。

class outerClass{  
   //outer class code  
    class nestedClass{  
      //nested class code  
    }  
}

Kotlin嵌套類示例

class outerClass{
    private var name: String = "Ashu"
    class nestedClass{
        var description: String = "code inside nested class"
        private var id: Int = 101
        fun foo(){
            //  print("name is ${name}") // cannot access the outer class member
            println("Id is ${id}")
        }
    }
}
fun main(args: Array<String>){
// nested class must be initialize
    println(outerClass.nestedClass().description) // accessing property
    var obj = outerClass.nestedClass() // object creation
    obj.foo() // access member function
}

執行上面示例代碼,得到以下結果 -

code inside nested class
Id is 101

Kotlin內部類

內部類是一個使用關鍵字inner在一個類中創建的類。 換句話說,可以說標記爲inner的嵌套類稱爲內部類。

內部類不能在接口或非內部嵌套類中聲明。

class outerClass{  
   //outer class code  
    inner class innerClass{  
      //nested class code  
    }  
}

內部類優於嵌套類的優點是,即使它是私有的,它也能夠訪問外部類的成員。 內部類保持對外部類的對象的引用。

Kotlin內部類示例

class outerClass{
    private  var name: String = "Maxsu"
    inner class  innerClass{
        var description: String = "code inside inner class"
        private var id: Int = 10010
        fun foo(){
            println("姓名:${name}") // access the outer class member even private
            println("編號:${id}")
        }
    }
}
fun main(args: Array<String>){
    println(outerClass().innerClass().description) // accessing property
    var obj = outerClass().innerClass() // object creation
    obj.foo() // access member function

}

執行上面示例代碼,得到以下結果 -

code inside inner class
姓名:Maxsu
編號:10010