📜  如何在 Kotlin 中使用嵌套类?

📅  最后修改于: 2022-05-13 01:54:39.225000             🧑  作者: Mango

如何在 Kotlin 中使用嵌套类?

一个类在另一个类中声明,然后它被称为嵌套类。默认情况下,嵌套类是静态的,因此我们可以使用点 (.) 表示法访问嵌套类属性或变量,而无需创建类的对象。

声明语法:

class outerClass {
       ............
      // outer class properties or member function
      
      class nestedClass { 
            ..........
            // inner class properties or member function
      }
}

在 Kotlin 中使用嵌套类

现在我们将通过以下步骤了解如何使用嵌套类:让我们尝试一个 Kotlin 中嵌套类的示例:

Kotlin
fun main(args: Array){
    var al = outCl()
    al.printAB()
    outCl.inCl().printB()
}
class outcl{
    var a = 6 
    fun printAB(){
        var b_ = incl().b
        printin("a = $a and b = $b_from inside outCl")
    }
    class incl{
        var b = "9" 
        fun printB(){
            printin("b = $b from inside incl")
        }
    }
}


Kotlin
fun main(args: Array) {
  var a = outcl()
  a.printAB()
  a.incl().printAB()
}
class outcl {
  var a = 6
  fun printAB() {
    var b_ = incl().b
    println ("a = $a and b = $b_ from inside outCl")
  }
  inner class incl {
    var b = "9"
    fun printAB() {
      printin ("a = $a and b = $b from inside incl")
    }
  }
}


Kotlin
val customText TemplateListener = object : ValueEventListener{
  override fun onCancelled (p0: DatabaseError?) {
  }
  override fun onDataChange (dataSnapshot: DataSnapshot?) {
  }
}


输出:

a = 6 and b = 9 from inside outCl
b = 9 from inside incl

现在,让我们尝试一个内部类的示例。要将嵌套类声明为内部,我们使用 inner 关键字。内部类可以访问外部类的成员,因为它们带有对外部类的引用:

科特林

fun main(args: Array) {
  var a = outcl()
  a.printAB()
  a.incl().printAB()
}
class outcl {
  var a = 6
  fun printAB() {
    var b_ = incl().b
    println ("a = $a and b = $b_ from inside outCl")
  }
  inner class incl {
    var b = "9"
    fun printAB() {
      printin ("a = $a and b = $b from inside incl")
    }
  }
}

输出:

a = 6 and b = 9 from inside outcl
b = 6 and b = 9 from inside incl

可以通过在另一个类中声明嵌套类来创建嵌套类。在这种情况下,要访问嵌套类,您可以创建一个静态引用,就像 outerClass.innerClass() ,您也可以使用它制作内部类的对象。另一方面,内部类是通过将 inner 关键字添加到嵌套类来创建的。在这种情况下,我们访问内部类,就好像它是外部类的成员一样,也就是说,使用外部类的对象,如下所示:

var outerClassObject = outerClass ()
outerClassObject.innerClass ().memberVar

嵌套类无法访问外部类的成员,因为它没有对外部类对象的任何引用。另一方面,内部类可以访问所有外部类的成员,因为它具有对外部类对象的引用。

我们还可以使用object关键字在 Kotlin 中创建匿名内部类,如下所示:

科特林

val customText TemplateListener = object : ValueEventListener{
  override fun onCancelled (p0: DatabaseError?) {
  }
  override fun onDataChange (dataSnapshot: DataSnapshot?) {
  }
}

在 JVM 上,如果对象是函数式Java接口的实例(即具有单个抽象方法的Java接口),您可以使用带有接口类型前缀的 lambda 表达式来创建它: