演算子を使用してクラスをインスタンス化すると、クラスnew
の新しいインスタンスが取得されます。新しいインスタンスはオブジェクトです。
object
キーワードを使用してシングルトン オブジェクトを宣言できます。コンパイル時にインスタンス化されると言っても、実際には何の意味もありません。オブジェクトは、プログラムの実行中のみ存在し、それ以前 (プログラムのコンパイル時など) には存在しません。Anobject
は、最初に使用されるときにインスタンス化されます。
4 は Int のケース クラスですか? 5.07 は Double のケース クラスですか?
No. 4 と 5.07 は、クラスInt
との単なるインスタンスですDouble
。Scala ではオブジェクトと同じように動作しますが、4 と 5.07 は実際にはオブジェクトではありません。これを理解するには、標準の Scala クラス階層について知っておく必要があります。
階層の最上位は typeAny
です。すべてが伸びAny
ます。Any
には、 と の 2 つの直接サブタイプがAnyVal
ありAnyRef
ます。
AnyVal
すべての値型のスーパータイプです。値の型は、JVM プリミティブ型にマップされる型です (例: Int
-> int
、Double
->double
など)。
AnyRef
すべての参照型 (「通常の」オブジェクト) のスーパータイプです。
実行時に、拡張AnyRef
するものはすべて舞台裏のオブジェクトであり、拡張するものはすべてAnyVal
実際にはオブジェクトではありません。プリミティブ型にマップされます。
ケースクラスは、一種の構文糖衣です。ケース クラスは通常のクラスとまったく同じですが、コンパイラがいくつかのメソッドを自動的に追加する点が異なります (たとえば、パターン マッチングに適したものになります)。