Sealed Classes
In this page:
Sealed Classes
Marking a class or trait sealed restricts all its direct subtypes to being defined in the same source file, letting the compiler check that a match expression covers every possible case exhaustively. This is especially powerful combined with case classes to model a fixed, closed set of variants (like a simple enum-style hierarchy). The compiler warns if a match on a sealed hierarchy misses a case.
Note: sealed combined with case classes gives you compiler-checked exhaustiveness warnings on match expressions -- a very common, powerful Scala pattern.
Example: Sealed Classes
sealed trait Shape
case class Circle(radius: Double) extends Shape
case class Square(side: Double) extends Shape
object Main extends App {
def area(shape: Shape): Double = shape match {
case Circle(r) => Math.PI * r * r
case Square(s) => s * s
}
println(area(Circle(2)))
println(area(Square(3)))
}
Login to try C/C++/Java/PHP code in the editor
Chapter Quiz — Complete all 7 topics to unlock
0/7 topics done
Complete these topics first: