20.3 OOP in Rust: No Classes or Inheritance

Rust does not include classical classes or inheritance. Instead, it provides:

  • Structs and Enums: Data types unencumbered by hierarchical constraints.
  • Traits: Similar to interfaces, traits define method signatures (and can include default implementations) independently of a single base class.
  • Modules and Visibility: Rust’s module system, with private-by-default items and pub for public exposure, handles encapsulation.
  • Composition Over Inheritance: Complex features emerge from combining multiple small structs and traits rather than stacking class layers.

20.3.1 Code Reuse in Rust

Traditional OOP frequently leverages inheritance for code reuse. Rust encourages other patterns:

  • Traits: Define shared behavior and implement it across different types.
  • Generics: Write code that works across diverse data types without sacrificing performance.
  • Composition: Build complex functionality by nesting or referencing smaller, well-focused structs within larger abstractions.
  • Modules: Group logically related functionality, re-exporting items selectively to control the public interface.

By mixing these features, Rust empowers you to reuse code without creating rigid class hierarchies.