object class10 {
// 外部类
class Car() {
var wheel: Int = 3
// 私有成员
private var speed: Int = 0
def run(): Unit = {
println(s"速度为: ${speed}, run...")
}
// 内部类
class Engine() {
def acc(increment: Int): Unit = {
speed += increment // 内部类可以直接访问外部类的私有成员!
}
}
class AutoPark() {}
}
def main(args: Array[String]): Unit = {
val c1 = new Car()
// c1.speed // 错误:私有成员不能直接访问
c1.run() // 输出:速度为: 0, run...
val en = new c1.Engine() // 创建内部类实例
en.acc(10) // 通过内部类修改外部类的私有成员
c1.run() // 输出:速度为: 10, run...
}
}
内部类的关键特点:
- 访问权限:内部类可以直接访问外部类的所有成员(包括私有成员)
- 实例关联:每个内部类实例都与特定的外部类实例关联
- 命名空间:避免命名冲突,组织代码更清晰
内部类的优势:
- 封装性更好:相关类组织在一起
- 访问控制:内部类可以访问外部类的私有成员
- 避免命名冲突:不同外部类的内部类可以同名