前言:努力想要得到什么东西,其实只要沉着冷静、实事求是,就可以轻易地、神不知鬼不觉地达到目的。而如果过于使劲,闹得太凶,太幼稚,太没有经验,就哭啊,抓啊,拉啊,像一个小孩扯桌布,结果却是一无所获。只不过把桌子上的好东西都扯在地上,永远也得不到了。
一、嵌套类
类可以嵌套在其他类:
class Outer {
private val number: Int = 1
class Nested {
fun foo() = 2
//嵌套类不能访问外部了的私有或公有成员
}
}
//调用
val nest = Outer.Nested().foo()//nest == 2
调用格式为:外部类.嵌套类().嵌套类方法/属性。
类 Nested 嵌套在类 Outer 内部,称为嵌套类;类 Outer 相对于类 Nested 来说是外部类。嵌套类能通过外部类直接访问,但是不能访问外部了的私有或公有成员。
二、内部类
在 Kotlin 中,只有被 inner
标记的嵌套类才叫内部类,其他在类内部写的类统称为嵌套类。内部类可以访问其他外部类的成员,内部类引用外部类的对象:
class Outer {
private val number: Int = 0
//被 `inner` 标记的嵌套类才叫内部类
inner class Inner {
fun foo() = number//内部类可以访问外部类私有成员
}
}
val inner = Outer().Inner().foo()//inner == 0
内部类只能通过外部类实例进行访问,它可以访问外部类成员。调用格式为:外部类().内部类().内部类方法/属性。
三、匿名内部类
我们不再通过显式定义一个父实现的子类来创建对象,而是直接通过父实现来创建一个没有名字的对象,这个对象就是匿名内部类,这里是指接口或者抽象类。匿名内部类实例是使用对象表达式创建的:
//抽象类
abstract class MyAdapter {
open fun mouseClicked() {
}//open 修饰,子类可重写
}
//调用匿名内部类
fun test(){
object : MyAdapter() {
//Kotlin 匿名内部类的写法:object + 冒号":" + 类名
override fun mouseClicked() {
println("MyAdapter == mouseClicked")
}
}
}
Kotlin 对于匿名内部类的实现引入了 object 关键字,此关键字并不是 Java 中的 Object 类,相关用法后面会讲解。
注意:在JVM上,如果对象是一个函数式 Java 接口的实例(即一个带有单一抽象方法的 Java 接口),你可以使用一个 lambda表达式来创建它,该表达式前缀为接口的类型:
val listener = View.OnClickListener {
println("View.OnClickListener") }
View.OnClickListener 具有单一抽象方法。
四、局部类
Kotlin 中的局部类和 Java 中的局部类一致,即定义在方法(函数)中的类。
class Outer {
private val number: Int = 0
fun memberMethod() {
class Part {
//局部类
var numPart = number
var name: String = "Part"
fun partMethod() {
println("我是局部类中的方法")
}
}
val part = Part()
println("name == $name | numPart == " + part.numPart)
part.partMethod()
}
}
//调用
Outer().memberMethod()
打印数据如下:
name == Kotlin | numPart == 0
我是局部类中的方法
局部类只能在定义该局部类的方法中使用。定义在实例方法中的局部类可以访问外部类的所有变量和方法,但不能修改。
源码地址:https://github.com/FollowExcellence/KotlinDemo-master
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
我是suming,感谢各位的支持和认可,您的点赞就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
要想成为一个优秀的安卓开发者,这里有必须要掌握的知识架构,一步一步朝着自己的梦想前进!Keep Moving!