如何在 Kotlin 中使用嵌套类?
一个类在另一个类中声明,然后它被称为嵌套类。默认情况下,嵌套类是静态的,因此我们可以使用点 (.) 表示法访问嵌套类属性或变量,而无需创建类的对象。
声明语法:
class outerClass {
............
// outer class properties or member function
class nestedClass {
..........
// inner class properties or member function
}
}
Note: Nested class can’t access the members of the outer class, but we can access the property of nested class from the outer class without creating an object for nested class.
在 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 表达式来创建它:
val listener = ActionListener { println(“clicked”) }