TL ; DR:
Inside an override method, super.bark() calls the parent's version of bark on the same object. This lets you extend the parent's behavior instead of replacing it.
class Puppy(name: String) : Dog(name) {
override fun bark() {
super.bark() // do everything the parent did
println("Yip! Said $name")
}
}
Why it matters
Overriding a method replaces the parent's behavior. Often you want to extend it instead: keep what the parent did and add something more. A typical example is a save method: the parent writes the row to the database, and a subclass runs the parent's save first and then writes a log line.
Your task
The Puppy class already overrides bark(), but the body is empty. Inside Puppy.bark():
- call the parent's version with
super.bark(), soWoof! I am <name>still prints; - then
println("Yip! Said $name").
Notes:
- In Kotlin a class can be extended only if it is
open, and a method overridden only if it isopen.DogandDog.barkare already marked that way. Puppy(name: String) : Dog(name)passes the name toDog's constructor;$nameinside a string inserts thenameproperty.
The driver (already written, it runs when you press Run):
val buddy = Puppy("Buddy")
buddy.bark()
val rex = Puppy("Rex")
rex.bark()
val dog = Dog("Max")
dog.bark()
buddyis aPuppy: itsbarkprints the parent's line, then its own.rexis anotherPuppy: the names come from the object, nothing is hard-coded.dogis a plainDog: itsbarkis unchanged and prints only the parent's line, with noYip!.
Expected output:
Woof! I am Buddy
Yip! Said Buddy
Woof! I am Rex
Yip! Said Rex
Woof! I am Max
Free plan: 30 tutor messages. Premium is unlimited.
