scala匿名内部类

scala匿名内部类
-------------------

1、匿名类:

     也就是没有命名的类

2、抽象类

  // 抽象类
  abstract class Person {
  def say = {
    println("hello")
  }

3、普通类
  class Person1(var name: String, var age: Int) {
    def say = {
      println("hello")
    }
  }

4、匿名内部类定义

  匿名内部类是没有名称的子类,又成匿名子类,是直接通过实例对象创建。Spark的源代码中有大量使用到匿名内部类。
  scala中的匿名内部类使用与Java一致。

       定义:

  val/var 变量名 = new 类/抽象类 {
    // 重写方法
  }

5、匿名内部类示例

object AnonymityInnerClass {

  // 抽象类
  abstract class Person {
    def sayHello: String
  }

  // 普通类
  class Person1(var name: String, var age: Int) {
    def sayHello = ""
  }


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

    // 抽象类不能实例化
    //val p0 = new Person()

    // 抽象类的匿名子类对象
    val anonInnerClass1 = new Person {
      override def sayHello: String = "hellp scala!!!"
    }
    println(anonInnerClass1.sayHello)

    // 普通类的的匿名子类对象
    val anonInnerClass2 = new Person1("xiaoen", 7) {
      override def sayHello: String = this.name+"|"+this.age.toString
    }
    println(anonInnerClass2.sayHello)

    // 普通类对象
    val normalPerson =  new Person1("xiaoen", 7)
    println(normalPerson.name+"|"+normalPerson.age)

  }
}

 

上一篇:如何获取 Kafka 的消费者详情? —— 从 Scala 到 Java 的切换


下一篇:scala访问修饰符和关键字