TL ; DR:
Inside an overriding method, base.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 : Dog {
public Puppy(string name) : base(name) { }
public override void Bark() {
base.Bark(); // do everything the parent did
Console.WriteLine("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
base.Bark();, soWoof! I am <name>still prints; - then
Console.WriteLine("Yip! Said " + name);.
Notes:
- The constructor's
: base(name)(already written) passes the name toDog's constructor;base.Bark()does the same for a method. Dog.BarkisvirtualandPuppy.Barkisoverride; both are already written.nameis apublicfield ofDog.
The driver (already written, it runs when you press Run):
Puppy buddy = new Puppy("Buddy");
buddy.Bark();
Puppy rex = new Puppy("Rex");
rex.Bark();
Dog dog = new 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.
