美文网首页
Kotlin面向对象 (7)✔️嵌套类

Kotlin面向对象 (7)✔️嵌套类

作者: 狼性代码人 | 来源:发表于2019-05-30 17:58 被阅读0次
  • 嵌套类
  • 内部类 (特殊的嵌套类)
  • kotlin 语言中允许在一个类的内部声明另一个类,称为“嵌套类”,嵌套类还有一种特殊形式——内部类。

个人理解:kotlin嵌套类可以理解为 Java 中的静态内部类,嵌套类不持有外部类引用;而 kotlin 中的内部类也可以理解为 Java 中的非静态内部类,内部类持有外部类的引用。

一、嵌套类

嵌套类可以声明为 publicprotectedinternalprivate

class View { // 外部类

    val width: Int = 20

    class Button { // 嵌套类
        fun onClick() {
            println("onClick...")
            // println(width) // 编译错误 1️⃣
        }
    }

    fun test() {
        val button = Button()
        button.onClick()
    }
}

上面第1️⃣行代码,尝试访问外部类的属性 width 编译错误,因为嵌套类 Button 并不持有外部类 View 的引用,自然也不能访问外部类的属性。

fun main(args: Array<String>) {
    val button = View.Button()  // 2️⃣
    button.onClick()

    val view = View()
    view.test()
}

代码第2️⃣行可以看出,嵌套类 Button 可以通过外部类点 (View.) 嵌套类名 (Button) 单独构造 (外部类 view 并未创建)

二、内部类 (特殊的嵌套类)

内部类是一种特殊的嵌套类,内部类可以访问外部类属性、函数,因为内部类持有外部类引用。内部类的声明需要在 class 前面加 inner 关键字。

class Outer {   // 外部类
    val x = 10

    fun printOuter() {
        println("调用外部函数...")
    }

    fun test() {
        val inner = Inner()
        inner.display()
    }

    inner class Inner { // 内部类
        private val x = 20

        fun display() {
            println("外部类属性 x = ${this@Outer.x}") // 4️⃣
            println("内部类属性 x = ${this.x}")  // 3️⃣
            println("内部类属性 x = ${x}")

            this@Outer.printOuter()
            printOuter() // 5️⃣
        }
    }

}

提示:在内部类中 this 是引用当前内部类对象,见代码第3️⃣行。而要引用外部类对象需要使用 this@类名,见代码第4️⃣行,如果内部类和外部类的成员命名没有冲突,在引用外部类成员时可以不用加 this@类名,见代码第5️⃣行。

fun main(args: Array<String>) {
    val outer = Outer()
    outer.test()

    // val inner1 = Outer.Inner() // 编译错误
    val inner1 = Outer().Inner() // 6️⃣ 必需通过实例Outer来创建Inner类
    inner1.display()
}

一般情况下,内部类不能为外部类之外调用,只是为外部类使用的。但如果一定要在外部类之外访问内部类,kotlin也是支持的,见代码第6️⃣行,需要先实例化外部类,再通过这个实例化的外部类来创建内部类。

相关文章

  • Kotlin面向对象 (7)✔️嵌套类

    嵌套类内部类 (特殊的嵌套类) kotlin 语言中允许在一个类的内部声明另一个类,称为“嵌套类”,嵌套类还有一种...

  • Kotlin面向对象之嵌套类(Nested Classes)

    一个类可以嵌套在其他类的内部: 内部类(Inner classes) 类可以被标记为inner以能够访问外部类的成...

  • kotlin嵌套类、内部类、匿名内部类、伴生对象

    kotlin嵌套类、内部类、匿名内部类 伴生对象 Kotlin中的对象指的是使用object关键字定义的类型声明,...

  • Kotlin——面向对象

    Kotlin面向对象 类和对象 Kotlin提供了定义类、属性、方法等最基本的功能。类可被认为是一种自定义的数据类...

  • kotlin 嵌套和内部类

    Kotlin 嵌套类 与Java类似,Kotlin允许您在另一个称为嵌套类的类中定义一个类 由于嵌套类是其封闭类的...

  • java的内部类

    前言 面向对象程序设计中,可以在一个类的内部定义另一个类(静态嵌套类和非静态嵌套类)。静态嵌套类使用很少,最重要的...

  • kotlin精讲-第3章(4)嵌套类&数据类

    嵌套类 我们在Kotlin内部还可以定义类,这样的类,我们可以称为嵌套类(nestedclasses)。嵌套类分成...

  • Kotlin内联类、内部类、嵌套类

    Kotlin内联类、内部类、嵌套类 在开始介绍Kotlin内联类、内部类、嵌套类之前,先简要回顾一下java中的内...

  • 第六篇:Kotlin之面向对象简单

    上篇:Kotlin之函数Lambda表达式 下篇:Kotlin之面向对象升级(一) Kotlin也支持面向对象的三...

  • kot

    #Kotlin之班门弄斧 ##面向对象 ##java和kotlin的交互 ##协程及协程框架 ## 面向对象 ...

网友评论

      本文标题:Kotlin面向对象 (7)✔️嵌套类

      本文链接:https://www.haomeiwen.com/subject/bfgvtctx.html