1、 首先梳理一下类的修饰符
classModifier:
abstract 抽象类
final 不可继承类,默认是该属性
enum 枚举类
open 可继承类
annotation 注解类
accessModifier:
private: 仅在同一个文件中可见
protected:仅在同一个package或者子类中可见
public:所有地方可见
internal:同一模块中可见
2、嵌套类
class OuterClass {
private val bar: Inter = 1
class Nested {
fun foo() = 2
}
}
嵌套类的引用
var demo = OuterClass.Nested().foo()
println("嵌套类: " + demo)
3、内部类
class InnerClass {
private val bar: Int = 1
var v = "成员属性"
inner class Inner {
fun foo() = bar //访问外部成员
fun innerTest() {
var o = this@InnerClass //访问外部类的成员变量
println("内部类可以引用外部类的成员,例如: " + o.v)
}
}
}
内部类的引用
var demo = InnerClass().Inner().foo()
println(demo)
InnerClass().Inner().innerTest()
4、匿名内部类
class InnerClass {
private val bar: Int = 1
var v = "成员属性"
fun setInterface(test: TestInterface) {
test.test()
}
interface TestInterface {
fun test()
}
}
匿名内部类的使用如下:
var interfaceClaz = InnerClass()
interfaceClaz.setInterface(
object: InnerClass.TestInterface {
override fun test() {
println("对象表达式创建匿名内部类的实例")
}
}
)