وقتی یک کلاس در Scala با استفاده از کلمه case تعریف می شود، کامپایلر Scala خصوصیات زیر را برای آن کلاس در نظر می گیرد، برای مثال کلاس زیر را در نظر بگیرید:
case class Var(name: String)
- یک factory متد با نام کلاس برای آن کلاس در نظر می گیرد که باعث می شوند ساختن شئ از آن کلاس آسان شود:
val v = Var("x")
- پارامتر های یک case class بصورت val و در قالب فیلد درون کلاس تعریف می شوند:
v.name
- کامپایلر Scala پیاده سازی های مناسبی از متد های equals، hashCode و toString برای کلاس قرار می دهد. پیاده سازی متد equals بصورت بازگشتی بوده و شامل تمام پارامتر های کلاس می شود و چون اپراتور == همیشه متد equals را فراخوانی می کند مقایسه محتوای یک شئ که از case class ساخته شده است را آسان می سازد.
- کامپایلر Scala متدی با نام copy به case class ها اضافه می کند که اجازه می دهد یک کپی تغییر یافته از شئ مورد نظر داشته باشیم:
v.copy(name = "y")
- مهمترین کاربرد case class ها در Scala کاربرد آنها در Pattern matching است.