2012-03-18 21 views
8

どのように抽象クラスをインスタンス化するのですか?スカラー:抽象クラスのインスタンス化?

abstract class A { 
    val a: Int 
    } 

    val a = new A {val a = 3} 

暗黙的に作成された具体的なクラスはありますか?そして、これらのブレースはnew Aの後に何を意味しますか?

答えて

18

を参照してください。これにより、暗黙的にAが拡張されます。あなたがしたことはこれに同等のシンタックスシュガー、次のとおりです。

class A' extends A { 
    val a = 3 
} 
val a = new A' 

これらのブラケットは単にあなたが値aをインスタンス化し、任意のより多くのため、抽象的ではない、新たな、匿名クラスを作成し、その場でクラスを拡張してみましょう。

5

は、Javaを知っている場合、これは次のようになります。あなたが任意の抽象機能を実装していないが、ちょうどaに値を与えることによって、あなたが実際に「concretesizeを行うように見えるためScalas uniform access

new SomeAbstractClass() { 
    // possible necessary implementation 
} 

" クラス。

つまり、A具象サブクラスのインスタンスを、サブクラスに名前を付けることなく作成します(したがって、「匿名」という用語)。

3

Scalaでは、匿名の関数だけでなく匿名のクラスも作成できます。あなたがやっていること

class Anon extends A { 
    val a = 3 
} 

にまねですがAnon

3

せずに、あなたはAから継承し、その抽象メンバーをオーバーロード匿名クラスをインスタンス化しています。 参照のための匿名クラスのインスタンス化については、A Tour of Scala: Abstract Types

関連する問題