内部类

56 阅读1分钟

内容如下:

1. 内部类的定义;

2. 内部类的基本使用;

3. 内部类的综合案例;

4. 内部对象;

5. 匿名类。

(一)内部类的定义

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

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

image.png

(二)内部类的基本使用

定义格式: class 类 {  class 内部类 }

使用格式: new 类的实例.内部类()

代码示范】在Car类中,再次定义Engine类

package level02

/*
* 内部类
* */
object class13 {
  // 外部类
  class Car() {
    var wheel: Int = 3

    def run(): Unit = {
      println("run.....")
    }

    // 内部类
    class Engin() {
      val power: Int = 12
    }
  }

  def main(args: Array[String]): Unit = {
    val c1 = new Car();

    var eng = new c1.Engin()

    println(eng.power)
  }
}

(三)内部类的使用案例

package level02

/*
* 内部类
* 1.格式:在一个类的里面,再写一个类
* 2.作用:组织逻辑更加严谨;避免命名的冲突
* */
object class13 {
  
  // 外部类
  class Car() {
    var wheel: Int = 3
    //私有成员
    private var speed:Int =0

    def run(): Unit = {
      println(s"速度为:${speed},run....")
    }
    // 内部类
    class Engin() {
      def acc(increment:Int):Unit = {
        speed += increment
      }
    }
    class AutoPark(){}
  }

  def main(args: Array[String]): Unit = {
    val c1 = new Car(); 
    //c1.speed  //私有成员不能访问
    c1.run()
    val en = new c1.Engin()
    en.acc(10)
    c1.run()
  }
}

image.png

(四)内部对象

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

定义格式: class 类名 {  object 对象名{ 属性;方法() }}

使用格式:类名.对象名.属性名; 类名.对象名.方法名()

(五)匿名类

匿名类指没有名字的类。匿名类只能使用一次。

语法】:

val 对象 = new {  

  // override methods or add additional members  

}

代码示例

object Main extends App {  

  val myCar = new {  
    def run() = {}  
  }  

}