内部类

内部类

package base

// App重写了main方法 可以直接运行IClass
object IClass extends App {

  //调用外部类中的内部类对象
  val ic1 = new OuterClass().InnerObject
  println("y = " + ic1.y)

  // 创建外部类实例
  val oc = new OuterClass()
  // 通过外部类实例创建内部类实例
  val ic2 = new oc.InnerClass()
  println("x = " + ic2.x)

  // 通过方法获取内部类实例
  val ic3 = new OuterClass().getInnerClass
  println("x = " + ic3.x)

  // 通过外部类对象创建内部类实例
  val oic = new OuterObject.InnerClass()
  println("m = " + oic.m)

  // 通过外部类对象调用内部类对象
  println("n = " + OuterObject.InnerObject.n)

}

// 外部类
class OuterClass {

  // 封装返回InnerClass的实例方法
  def getInnerClass: InnerClass = {
    new InnerClass()
  }

  // 内部类
  class InnerClass {
    var x = 1
  }

  // object 里面的字段都类似于被 static修饰了
  object InnerObject {
    val y = 2
  }

}

// 外部对象
object OuterObject {

  // 内部类
  class InnerClass {
    var m = 3
  }

  // 内部对象
  object InnerObject {
    var n = 4
  }

}

匿名内部类

package base

object RunC {
  def main(args: Array[String]): Unit = {

    // 匿名内部类, 直接实现抽象方法
    val abs = new AbsC {
      override def fun(): String = {
        "Abs class fun!"
      }
    }
    println(abs.fun())

  }
}

// 抽象类
abstract class AbsC {
  // 抽象方法
  def fun():String
}
posted @ 2019-09-01 21:45  会走的树  阅读(88)  评论(0编辑  收藏  举报