嵌套類與內部類

嵌套類與內部類詳解

嵌套類(Nested Class)

嵌套類不能訪問外部類其他成員,只能訪問另外一個嵌套類。例:
class OuterClass{
    prvate val str:String="hello world"
    class NestedClass{
        fun nestedMethod()="welcme" 
        fun nestedMethod()[email protected]//錯誤的,靜態類不能訪問非靜態類
    }
    class NestedClass2{
        val nestedClass=NestedClass() //靜態類只能訪問靜態類
        nestedClass.nestedMethod()
    }
}

fun main(args: Arrary<String>){
    println(OuterClass.NestedClass().nestedMethod())
}

內部類(Inner Class)

class OuterClass2{
    prvate val str:String="hello world"
   inner class innerClass{
        fun innerMethod()[email protected]
    }
    //局部嵌套類
    fun getName():String{
        class LocalNestedClass{
            val name:String="Test"
        }
        var localClass=LocalNestedClass()
        return localClass.name
    }
}

fun main(args: Arrary<String>){
    println(OuterClass2().NestedClass().innerMethod())
    println(OuterClass2().getName())
}
/*
* Kotlin 內部類訪問外部類變量的方式:[email protected]
* Java 訪問外部類變量的方式:OuterClass.this.str
* */
class Person (val name:String,val age:Int){
    private val str:String="Person屬性"
    private inner class PersonFeature(var height:Int,var weight:Int){
        private val str:String="PersonFeature屬性"
        fun getPersonFeature(){
            val str:String ="局部變量"
            println("身高:$height,體重:$weight")
            println("${[email protected]}")
            println("${this.str}")
            println(str)
        }
    }
    private fun method(){
        println("執行了Person的method方法")
    }
    fun getPerson(){
        val personFeature=PersonFeature(100,120)
        personFeature.getPersonFeature()
    }
}

fun main(args: Array<String>) {
    val person = Person("zhangsan", 20)
    person.getPerson()
}

內部類與嵌套類的區別聯繫

  1. 嵌套類:對應於Java的靜態內部類(即有static關鍵字修飾的內部類),只要在一個類的內部定義了另外一個類,那麼這個類就叫做嵌套類,相當於Java當中有static關鍵字修飾的內部類。
  2. 內部類:對應於Java中的非靜態內部類(即沒有static關鍵字修飾的內部類),使用inner關鍵字在一個類的內部定義的另外一個類就叫做內部類,相當於Java當中沒有static關鍵字修飾的內部類。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章