scala的内部类

67 阅读1分钟

内部类

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

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

1. 实例化内部类的对象

  1. val 外部类的对象 = new 外部类()
  2. val 内部类的对象 = new 外部类的对象.内部类

基本案例

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


object class20 {
  //外部类
  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()
  }
}

2.作用

  1. 整理代码,避免重名
  2. 访问,操作 外部类的私有成员

基本案例

//内部类
//1. 实例化内部类的对象
//   val 外部类的对象 = new 外部类()
//   val 内部类的对象 = new 外部类的对象.内部类
/*
*2. 作用
*   (1) 整理代码,避免重名
*   (2) 访问,操作 外部类的私有成员
 */


object class21 {
  //外部类
  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()
  }
}

3.内部对象

内部对象,就是定义在class内部的object。

基本案例

/*
*内部对象:在class内部,定义object对象
* 1. new Class的实例
* 2. 实例,对象
*
*/


object class22 {

  class Class1() {
    object obj {
      var age:Int=10
      def say():Unit={
        println(s"hello,${age}")
      }
    }
  }

  def main(args: Array[String]): Unit = {
    val c1=new Class1()
    c1.obj.say()
  }
}