Sealed classes are used for representing restricted class hierarchies, when a value can have one of the types from a limited set, but cannot have any other type