In [[Swift]], you can define your own classes to take advantage of [[Class Inheritance|class inheritance]] in your application. Classes are also extensively used in [[SwiftUI]] to define elements of the graphical interface. There are five key places where classes diverge from structs in [[Swift]]: 1. You can make one class build upon the inherited functionality (or explicitly `override` it). 2. Custom initializers are required for all classes (except if default values are provided for all properties). 3. If you copy a class instance, both instances share the same data (the data is [[Pass-By-Reference|passed-by-reference]]). 4. A special function called [[Swift Deinitializer|deinitializers]] can be called once the final instance of a class is destroyed. 5. Doesn't matter if a class instance is constant; if their properties have been defined as variable you can mutate them. ## Syntax Considerations Inheritance works by specifying an existing class name after a colon in the class definition. ```swift class Employee { let hours: Int // ... } class Developer: Employee { // ... func work() { print("Coding for \(hours) hours.") } } ``` To override a function, it has to be explicitly stated using the `override` keyword. A class can be marked `final` if we want to prevent any other class inheriting from it.