どのように抽象クラスをインスタンス化するのですか?スカラー:抽象クラスのインスタンス化?
abstract class A {
val a: Int
}
val a = new A {val a = 3}
暗黙的に作成された具体的なクラスはありますか?そして、これらのブレースはnew A
の後に何を意味しますか?
どのように抽象クラスをインスタンス化するのですか?スカラー:抽象クラスのインスタンス化?
abstract class A {
val a: Int
}
val a = new A {val a = 3}
暗黙的に作成された具体的なクラスはありますか?そして、これらのブレースはnew A
の後に何を意味しますか?
を参照してください。これにより、暗黙的にA
が拡張されます。あなたがしたことはこれに同等のシンタックスシュガー、次のとおりです。
class A' extends A {
val a = 3
}
val a = new A'
これらのブラケットは単にあなたが値a
をインスタンス化し、任意のより多くのため、抽象的ではない、新たな、匿名クラスを作成し、その場でクラスを拡張してみましょう。
は、Javaを知っている場合、これは次のようになります。あなたが任意の抽象機能を実装していないが、ちょうどa
に値を与えることによって、あなたが実際に「concretesizeを行うように見えるためScalas uniform accessへ
new SomeAbstractClass() {
// possible necessary implementation
}
" クラス。
つまり、A
の具象サブクラスのインスタンスを、サブクラスに名前を付けることなく作成します(したがって、「匿名」という用語)。
Scalaでは、匿名の関数だけでなく匿名のクラスも作成できます。あなたがやっていること
は
class Anon extends A {
val a = 3
}
にまねですがAnon
名
せずに、あなたはAから継承し、その抽象メンバーをオーバーロード匿名クラスをインスタンス化しています。 参照のための匿名クラスのインスタンス化については、A Tour of Scala: Abstract Types