Bird
Raised Fist0
Swiftprogramming~20 mins

Preventing overrides with final in Swift - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Final Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of overriding a final method
What will be the output of this Swift code?
Swift
class Vehicle {
    final func start() {
        print("Vehicle started")
    }
}

class Car: Vehicle {
    override func start() {
        print("Car started")
    }
}

let myCar = Car()
myCar.start()
ARuntime error
BCar started
CVehicle started
DCompile-time error: Cannot override 'final' method
Attempts:
2 left
💡 Hint
Remember what the 'final' keyword means for methods in Swift.
❓ Predict Output
intermediate
2:00remaining
Output when subclass tries to override a non-final method
What will be printed when running this Swift code?
Swift
class Animal {
    func sound() {
        print("Some sound")
    }
}

class Dog: Animal {
    override func sound() {
        print("Bark")
    }
}

let pet: Animal = Dog()
pet.sound()
ABark
BSome sound
CCompile-time error: Cannot override method
DRuntime error
Attempts:
2 left
💡 Hint
Check if the method is marked final or not.
🔧 Debug
advanced
2:00remaining
Identify the error caused by final class inheritance
What error will this Swift code produce?
Swift
final class Calculator {
    func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
}

class AdvancedCalculator: Calculator {
    func multiply(_ a: Int, _ b: Int) -> Int {
        return a * b
    }
}
ARuntime error: Inheritance violation
BCompile-time error: Cannot inherit from final class 'Calculator'
CNo error, code runs fine
DCompile-time error: Method multiply missing override keyword
Attempts:
2 left
💡 Hint
Check the meaning of 'final' when applied to classes.
📝 Syntax
advanced
2:00remaining
Which code correctly prevents overriding a method?
Choose the Swift code snippet that correctly prevents subclasses from overriding the method 'display()'.
A
class Screen {
    final func display() {
        print("Display on screen")
    }
}
B
final func display() {
    print("Display on screen")
}
C
class Screen {
    func final display() {
        print("Display on screen")
    }
}
D
class Screen {
    func display() final {
        print("Display on screen")
    }
}
Attempts:
2 left
💡 Hint
The 'final' keyword must come before 'func' in method declaration inside a class.
🚀 Application
expert
3:00remaining
How many methods can be overridden?
Given the following Swift code, how many methods can subclasses override?
Swift
class Base {
    final func fixedMethod() {}
    func openMethod() {}
    private func privateMethod() {}
    fileprivate func fileMethod() {}
}
A1
B3
C2
D0
Attempts:
2 left
💡 Hint
Consider method access levels and the effect of 'final'.

Practice

(1/5)
1.

What does the final keyword do in Swift?

easy
A. Makes a method asynchronous
B. Allows a class to be subclassed multiple times
C. Marks a variable as constant
D. Prevents a class or method from being overridden or subclassed

Solution

  1. Step 1: Understand the purpose of final

    The final keyword in Swift is used to stop classes or methods from being changed by subclasses.
  2. Step 2: Identify what final prevents

    It prevents overriding methods or subclassing classes, ensuring the code stays as originally designed.
  3. Final Answer:

    Prevents a class or method from being overridden or subclassed -> Option D
  4. Quick Check:

    final stops overrides = A [OK]
Hint: Remember: final means no changes allowed to class or method [OK]
Common Mistakes:
  • Confusing final with constant variables
  • Thinking final allows subclassing
  • Mixing final with async keyword
2.

Which of the following is the correct way to declare a method that cannot be overridden in Swift?

class Vehicle {
    _____ func startEngine() {
        print("Engine started")
    }
}
easy
A. override
B. mutating
C. final
D. static

Solution

  1. Step 1: Identify the keyword to prevent overriding

    In Swift, the final keyword is used before a method to stop it from being overridden in subclasses.
  2. Step 2: Check the method declaration

    Placing final before func correctly marks the method as non-overridable.
  3. Final Answer:

    final -> Option C
  4. Quick Check:

    Use final before func to prevent override [OK]
Hint: final before func means no override allowed [OK]
Common Mistakes:
  • Using override keyword incorrectly
  • Confusing static with final
  • Using mutating which is for structs
3.

What will happen when you run this Swift code?

class Animal {
    final func sound() {
        print("Animal sound")
    }
}

class Dog: Animal {
    override func sound() {
        print("Bark")
    }
}

let pet = Dog()
pet.sound()
medium
A. Prints "Animal sound"
B. Compile-time error due to overriding a final method
C. Prints "Bark"
D. Runtime error

Solution

  1. Step 1: Identify the use of final in the base class

    The method sound() in Animal is marked as final, so it cannot be overridden.
  2. Step 2: Check the subclass method override

    The Dog class tries to override sound(), which causes a compile-time error because overriding a final method is not allowed.
  3. Final Answer:

    Compile-time error due to overriding a final method -> Option B
  4. Quick Check:

    Overriding final method = Compile error [OK]
Hint: Overriding final method causes compile error [OK]
Common Mistakes:
  • Assuming it prints "Bark"
  • Thinking it prints base method output
  • Expecting runtime error instead of compile error
4.

Find the error in this Swift code and fix it:

final class Vehicle {
    func drive() {
        print("Driving")
    }
}

class Car: Vehicle {
    override func drive() {
        print("Car driving")
    }
}
medium
A. Remove final from Vehicle class
B. Remove override from Car's drive method
C. Change Vehicle to a struct
D. Add final to Car class

Solution

  1. Step 1: Identify the use of final on the Vehicle class

    The Vehicle class is marked as final, so it cannot be subclassed.
  2. Step 2: Check subclass declaration

    The Car class tries to subclass Vehicle, which causes a compile-time error because subclassing a final class is not allowed.
  3. Final Answer:

    Remove final from Vehicle class -> Option A
  4. Quick Check:

    Subclassing final class = Error; remove final [OK]
Hint: final class cannot be subclassed; remove final to fix [OK]
Common Mistakes:
  • Trying to override without removing final
  • Adding final to subclass instead of base
  • Changing class to struct unnecessarily
5.

You want to create a base class BankAccount with a method calculateInterest() that should never be changed by subclasses. However, subclasses can add new methods. How should you declare BankAccount and calculateInterest()?

hard
A. Declare BankAccount normally and calculateInterest() as final
B. Declare both BankAccount and calculateInterest() as final
C. Declare BankAccount as final and calculateInterest() normally
D. Declare BankAccount as a struct and calculateInterest() as final

Solution

  1. Step 1: Understand the requirement for subclassing

    The base class BankAccount should allow subclasses, so it must NOT be final.
  2. Step 2: Protect the method from being overridden

    Mark calculateInterest() as final to prevent subclasses from changing it.
  3. Final Answer:

    Declare BankAccount normally and calculateInterest() as final -> Option A
  4. Quick Check:

    final method, normal class = C [OK]
Hint: final method stops override; class normal allows subclass [OK]
Common Mistakes:
  • Making the whole class final, blocking subclassing
  • Not marking method as final, allowing override
  • Using struct instead of class incorrectly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard