无涯教程-Kotlin - 内部类

43 阅读1分钟

嵌套类

嵌套类就是在另一个类内部创建的类。在Kotlin中,嵌套类默认情况下是静态的,因此无需创建类的对象即可访问其数据成员和成员函数。嵌套类无法访问外部类的数据成员。

class outerClass{
   //外部类代码
    class nestedClass{
      //嵌套类代码
    }
}

嵌套类示例

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}")//不能访问外部类成员
           println("Id is ${id}")
        }
    }
}
fun main(args: Array<String>){
     // 嵌套类必须初始化
     println(outerClass.nestedClass().description)//访问属性
     var obj = outerClass.nestedClass()//对象创建
     obj.foo()//访问成员函数
}

输出:

code inside nested class
Id is 101

内部类

内部类是在另一个具有关键字inner的类中创建的类。换句话说,无涯教程可以说标记为“内部”的嵌套类称为内部类。

内部类不能在接口内部或非内部嵌套类中声明。

class outerClass{
   //外部类代码
    inner class innerClass{
      //嵌套类代码
    }
}

内部类优于嵌套类的优点是,即使它是私有的,它也可以访问外部类的成员。内部类保留对外部类对象的引用。

内部类示例

class outerClass{
     private  var name: String = "Ashu"
     inner class  innerClass{
       var description: String = "code inside inner class"
       private var id: Int = 101
       fun foo(){
        println("name is ${name}")//访问外部类成员甚至私有
        println("Id is ${id}")
       }
    }
}
fun main(args: Array<String>){
    println(outerClass().innerClass().description)//访问属性
    var obj = outerClass().innerClass()//对象创建
    obj.foo()//访问成员函数

}

输出:

code inside inner class
name is Ashu
Id is 101

参考链接

www.learnfk.com/kotlin/kotl…