1。概要
匿名内部クラスは、特定のクラスを継承する名前のないサブクラスオブジェクトであり、サンプルオブジェクトを作成するために直接使用できます。匿名の内部クラスは、Sparkのソースコードで広く使用されています。このコンテンツを学習した後、Sparkの基盤となるソースコードを確認することは非常に役立ちます。
2.文法
new 类名(){
//重写类中所有的抽象内容
}
注:上記の形式では、クラスのメインコンストラクターパラメーターリストが空の場合、括弧は省略できます。
3.使用シナリオ
- オブジェクトメソッド(メンバーメソッド)が1回だけ呼び出された場合
- メソッドパラメータとして渡すことができます
4.ケース
要求する:
- Personの抽象クラスを作成し、employeesayHelloの抽象メソッドを追加します
- Personタイプのオブジェクトを渡す必要があるshow()メソッドを定義してから、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();
}
}