What if you could write shared code once and reuse it everywhere without copying?
Why Base class and subclass in Swift? - Purpose & Use Cases
Imagine you have to write code for different types of vehicles: cars, bikes, and trucks. You write separate code for each, repeating similar parts like starting the engine or honking the horn.
This manual way is slow and boring. If you want to change how all vehicles start, you must update every single code block. It's easy to make mistakes and forget some places.
Using a base class and subclasses lets you write shared code once in the base class. Each subclass then adds its own special features. This saves time and keeps your code neat and easy to fix.
func startCar() { print("Engine started") }
func startBike() { print("Engine started") }
func startTruck() { print("Engine started") }class Vehicle { func start() { print("Engine started") } } class Car: Vehicle {} class Bike: Vehicle {} class Truck: Vehicle {}
You can build complex programs with many related parts that share behavior but also have their own unique actions.
Think of a game where you have different characters: warriors, mages, and archers. They all move and attack, but each in their own way. Base classes and subclasses help organize this easily.
Base class holds shared code for many objects.
Subclasses add or change features without repeating code.
This approach saves time and reduces errors.
Practice
Solution
Step 1: Understand the role of a base class
A base class defines common properties and methods that other classes can reuse.Step 2: Compare options with this role
To provide a general template for other classes to build upon correctly states the base class is a general template. Other options describe incorrect or unrelated roles.Final Answer:
To provide a general template for other classes to build upon -> Option BQuick Check:
Base class = general template [OK]
- Thinking base class cannot be inherited
- Confusing base class with instances
- Assuming base class only stores data
Dog inheriting from a base class Animal in Swift?Solution
Step 1: Recall Swift subclass syntax
In Swift, a subclass is declared using a colon (:) after the subclass name followed by the base class name.Step 2: Match options to syntax
class Dog: Animal { } usesclass Dog: Animal { }, which is correct. Other options use incorrect keywords or symbols.Final Answer:
class Dog: Animal { } -> Option CQuick Check:
Subclass syntax = colon (:) [OK]
- Using 'inherits' or 'extends' keywords (not Swift)
- Using wrong symbols like <
- Omitting the colon between subclass and base class
class Vehicle {
func sound() -> String {
return "Vroom"
}
}
class Car: Vehicle {
override func sound() -> String {
return "Beep"
}
}
let myCar = Car()
print(myCar.sound())What will be printed when this code runs?
Solution
Step 1: Understand method overriding in subclass
The subclassCaroverrides thesound()method to return "Beep" instead of the base class "Vroom".Step 2: Identify which method is called
When callingmyCar.sound(), the overridden method inCarruns, returning "Beep".Final Answer:
"Beep" -> Option AQuick Check:
Overridden method runs = "Beep" [OK]
- Expecting base class method output
- Confusing method override with overload
- Thinking print shows class name
class Animal {
func speak() {
print("Animal sound")
}
}
class Cat: Animal {
func speak() {
print("Meow")
}
}Solution
Step 1: Check method overriding rules in Swift
When a subclass provides its own version of a base class method, it must use theoverridekeyword.Step 2: Identify missing override keyword
Thespeak()method inCatlacksoverride, causing a compile error.Final Answer:
Missing override keyword before speak() in subclass -> Option DQuick Check:
Override keyword required for method override [OK]
- Forgetting override keyword
- Thinking subclass methods cannot have same name
- Assuming class names must be lowercase
Employee with a property name and a method work() that prints "Working". Then create a subclass Manager that overrides work() to print "Managing team" and adds a new method holdMeeting() that prints "Meeting started".Which code correctly implements this?
Solution
Step 1: Check base class implementation
The base classEmployeemust have anameproperty with initializer and awork()method printing "Working". class Employee { var name: String init(name: String) { self.name = name } func work() { print("Working") } } class Manager: Employee { override func work() { print("Managing team") } func holdMeeting() { print("Meeting started") } } and C have correct base class with initializer.Step 2: Check subclass overrides and new method
The subclassManagermust overridework()withoverridekeyword and addholdMeeting(). class Employee { var name: String init(name: String) { self.name = name } func work() { print("Working") } } class Manager: Employee { override func work() { print("Managing team") } func holdMeeting() { print("Meeting started") } } correctly usesoverrideand addsholdMeeting(). class Employee { var name: String init(name: String) { self.name = name } func work() { print("Working") } } class Manager: Employee { func work() { print("Managing team") } func holdMeeting() { print("Meeting started") } } missesoverride. class Employee { var name: String func work() { print("Working") } } class Manager: Employee { func work() { print("Managing team") } func holdMeeting() { print("Meeting started") } } misses initializer in base class. class Employee { var name: String init(name: String) { self.name = name } func work() { print("Working") } } class Manager: Employee { override func work() { print("Managing team") } } missesholdMeeting().Final Answer:
Option A code correctly implements all requirements -> Option AQuick Check:
Override + new method + initializer = class Employee { var name: String init(name: String) { self.name = name } func work() { print("Working") } } class Manager: Employee { override func work() { print("Managing team") } func holdMeeting() { print("Meeting started") } } [OK]
- Forgetting override keyword in subclass
- Missing initializer in base class
- Not adding new methods in subclass
Ready to prove it?
Pass the test and this pattern moves unknown
