TL ; DR:
When a child class defines a method with the same name as the parent's, the child's version overrides the parent's. Different objects can give the same method name different behavior.
class Dog {
func bark() { print("Woof!") }
}
class Puppy: Dog {
override func bark() { print("Yip!") }
}
Full lesson:
You've seen that a child class inherits the parent's methods. Overriding is what happens when the child wants to change one of those inherited methods.
Why override?
Subclasses are usually special cases of the parent. A Puppy is a Dog, but it sounds different — "Yip!" instead of "Woof!". Instead of inventing a new method name, you redefine bark() on the Puppy. Callers don't need to know which subclass they're holding — they just call bark() and the right version runs.
How it works in Swift
- The parent method needs no special marking; any non-
finalmethod of a class can be overridden. - The child marks its replacement with the
overridekeyword, which is required: without it the compiler reports an error. - The child's method must have the same name and parameter types as the parent's.
- Mark a method
finalin the parent to forbid overriding it.
Your task
The Dog class already defines bark. Inside the Puppy subclass, override bark so it prints "Yip! I am " followed by the puppy's name. The harness creates a Puppy named "Buddy" and calls bark() on it.
Expected output:
Yip! I am BuddyFree plan: 30 tutor messages. PRO is unlimited.
