1.概述
匿名内部类是继承了某个类的没有名字的子类对象,它可以直接用来创建示例对象。Spark的源代码中大量使用到匿名内部类。学完这块内容对我们查看Spark的底层源码非常有帮助。
2.语法
new 抽象类/trait(){
//重写类中所有的抽象内容
}
注意:上述格式中,如果类的主构造器参数列表为空,则小括号可以省略不写
3.使用场景
- 当对象方法(成员方法)仅调用一次的时候
- 可以作为方法的参数进行传递
4.案例
需求:
- 创建一个Person的抽象类,并添加员工sayHello的抽象方法
- 定义一个show()方法,该方法需要传入一个Person类型的对象,然后调用Person类的子类对象,调用Person类的sayHello方法
- 添加main方法,通过匿名内部类的方式来创建Person类的子类对象,调用Person类的sayHello()方法
- 调用show()方法
代码:
object demo {
abstract class Person{
def sayHello();
}
def main(args: Array[String]): Unit = {
//对成员方法仅调用一次:
new Person {
override def sayHello(): Unit = {
println("匿名内部类的sayHello()方法被调用了!")
}
}.sayHello();
//作为方法的参数进行传递:
show(new Person {
override def sayHello(): Unit = println("作为方法的参数进行传递sayHello()方法被调用了!")
})
}
def show(person: Person): Unit ={
person.sayHello();
}
}