内部类与外部类

33 阅读1分钟
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...
    }
}

内部类的关键特点:

  1. 访问权限:内部类可以直接访问外部类的所有成员(包括私有成员)
  2. 实例关联:每个内部类实例都与特定的外部类实例关联
  3. 命名空间:避免命名冲突,组织代码更清晰

内部类的优势:

  • 封装性更好:相关类组织在一起
  • 访问控制:内部类可以访问外部类的私有成员
  • 避免命名冲突:不同外部类的内部类可以同名