Until now, the only data types we have worked with are the integer and floating-point number types and the Bool type (for true and false). Let's broaden our repertoire.

Types may be composed to form new types. For example, struct is used to define a new named type that is composed of one or more co-located fields, each with its own name and type. A new type may also define its functional behavior in the form of methods.

Inheritance enriches composition by enabling one type to reuse state or methods defined by another type.