内部类(一)

58 阅读2分钟

(一)内部类的定义

定义在类或者对象内部的类称为内部类。

在类的内部有:属性,方法,类。

(二)内部类的基本使用

定义格式:

class 类 {  class 内部类 }

使用格式:

new 类的实例.内部类()

// 内部类
// 1. 实例化内部类的对象
//     val 外部类的对象 = new 外部类()
//     val 内部类的对象 = new 外部类的对象.内部类()

object basic17 {
     // 外部类
      class Class1() {
          // 写在C1内部的类
          class Class2() {
               def test():Unit = {
                    println("test....")
               }
          }
     }

     def main(args: Array[String]): Unit = {
          val c1 = new Class1()
          val c2 = new c1.Class2()
          c2 .test()
     }


}

内部类的好处

(1)逻辑组织:引擎与 汽车紧密相关,它们都属于汽车的上下文。将它们作为内部类可以使代码更为整洁和逻辑清晰。

(2)简化访问:内部类能够方便地访问外部类的私有成员,这样引擎类可以操作汽车的速度而不需要通过外部接口。

(3)减少命名冲突:由于内部类的作用范围限制在外部类内,避免了名称冲突(在大型项目中,可能会有多个引擎类)。

(3)内部类的使用案例

【案例要求】

在小汽车类的基础上补充私有变量:speed; 并在Car类的内部定义一个Engine类,在这个类中去定义方法去修改speed。

/**
 * 2. 作用
 *  (1) 整理代码
 *  (2) 访问,操作 外部类的私有成员
 */

object basic18 {
  // 外部类
  class Car() {
    // 私有属性,在类的外部不能访问
    private var speed:Int = 0
    def getSpeed():Unit = {
      println(s"当前速度是${speed}")
    }

    class Engin() {
      def accSpeed(s:Int = 10):Unit = {
        speed += s
      }
      def subSpeed(s:Int = 10):Unit = {
        speed -= s
      }
    }
  }

     def main(args: Array[String]): Unit = {
       val car = new Car()
       val engin = new car.Engin()
       engin.accSpeed(20)
       engin.subSpeed(10)
       car.getSpeed() // 当前速度是10
     }
}