Chapter 13. The Scala Type Hierarchy
We’ve already seen many of the types available in Scala’s library. Now, we’ll fill in the details about the hierarchy of types. Chapter 14 will discuss the collections. Figure 13-1 shows the large-scale structure of the hierarchy for Scala types.
![ps3e 1301](/api/v2/epubs/9781492077886/files/assets/ps3e_1301.png)
Figure 13-1. Scala’s type hierarchy
At the root of the type hierarchy is Any
. It has no supertypes and four subtypes:
-
Matchable
, the supertype of all types that support pattern matching, which we discussed in “Safer Pattern Matching with Matchable”.Matchable
is also a supertype ofAnyVal
andAnyRef
. -
AnyVal
, the supertype of value types and value classes. -
AnyRef
, the supertype of all reference types. -
Universal traits, which we discussed in “Value Classes”.
AnyVal
has nine concrete subtypes, called the value types. They don’t require heap allocation of instances. Seven of them are numeric value types:
Byte
,
Char
,
Short
,
Int
,
Long
,
Float
, and
Double
.
The remaining two are nonnumeric:
Unit
and
Boolean
.
Value classes also extend AnyVal
(see “Value Classes”).
In contrast, all the other types are reference types, because instances of them are allocated in the heap and managed by reference. They are subtypes of AnyRef
.
Because AnyVal
and AnyRef
subtype Matchable
, all their subtypes can be used in pattern matching. The only types for which values can’t be used in pattern matching are Any
, method ...
Get Programming Scala, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.