Inheritance and Polymorphism
Method Overriding
A derived class can override a virtual method from its base class.
override
An override replaces virtual base behavior for a derived class.
Method Overriding
MethodOverriding.cs
Replay: real traced execution (multi-file project)
using System;
class Notifier
{
public virtual string Message()
{
return "notice";
}
}
class EmailNotifier : Notifier
{
private readonly string subject;
public EmailNotifier(string subject)
{
this.subject = subject;
}
public override string Message()
{
return "email:" + subject;
}
}
class Program
{
static void Main()
{
string subject = "Update";
EmailNotifier notifier = new EmailNotifier(subject);
string message = notifier.Message();
Console.WriteLine($"subject={subject}");
Console.WriteLine($"message={message}");
}
}
using System;
class Notifier
{
public virtual string Message()
{
return "notice";
}
}
class EmailNotifier : Notifier
{
private readonly string subject;
public EmailNotifier(string subject)
{
this.subject = subject;
}
public override string Message()
{
return "email:" + subject;
}
}
class Program
{
static void Main()
{
string subject = "Alert";
EmailNotifier notifier = new EmailNotifier(subject);
string message = notifier.Message();
Console.WriteLine($"subject={subject}");
Console.WriteLine($"message={message}");
}
}
using System;
class Notifier
{
public virtual string Message()
{
return "notice";
}
}
class EmailNotifier : Notifier
{
private readonly string subject;
public EmailNotifier(string subject)
{
this.subject = subject;
}
public override string Message()
{
return "email:" + subject;
}
}
class Program
{
static void Main()
{
string subject = "Receipt";
EmailNotifier notifier = new EmailNotifier(subject);
string message = notifier.Message();
Console.WriteLine($"subject={subject}");
Console.WriteLine($"message={message}");
}
}
subject ← Update
27{28 static void Main()29 {30 string subject→ Update = "Update"; //@subject="Alert", "Receipt"31 EmailNotifier notifier = new EmailNotifier(subject);32 string message = notifier.Message();this.subject ← Update
15public EmailNotifier(string subjectUpdate)16{17 this.subject→ Update = subjectUpdate;18}notifier ← EmailNotifier
30string subject = "Update"; //@subject="Alert", "Receipt"31EmailNotifier notifier→ EmailNotifier = new EmailNotifier(subject);32string message = notifierEmailNotifier.Message();public override string Message()
20public override string Message()21{22 return "email:" + subjectUpdate;23}message ← email:Update
31 EmailNotifier notifier = new EmailNotifier(subject);32 string message→ email:Update = notifierEmailNotifier.Message();3334 Console.WriteLine($"subject={subjectUpdate}");35 Console.WriteLine($"message={messageemail:Update}");36}outputsubject=Update message=email:Update
subject ← Alert
27{28 static void Main()29 {30 string subject→ Alert = "Alert";31 EmailNotifier notifier = new EmailNotifier(subject);32 string message = notifier.Message();this.subject ← Alert
15public EmailNotifier(string subjectAlert)16{17 this.subject→ Alert = subjectAlert;18}notifier ← EmailNotifier
30string subject = "Alert";31EmailNotifier notifier→ EmailNotifier = new EmailNotifier(subject);32string message = notifierEmailNotifier.Message();public override string Message()
20public override string Message()21{22 return "email:" + subjectAlert;23}message ← email:Alert
31 EmailNotifier notifier = new EmailNotifier(subject);32 string message→ email:Alert = notifierEmailNotifier.Message();3334 Console.WriteLine($"subject={subjectAlert}");35 Console.WriteLine($"message={messageemail:Alert}");36}outputsubject=Alert message=email:Alert
subject ← Receipt
27{28 static void Main()29 {30 string subject→ Receipt = "Receipt";31 EmailNotifier notifier = new EmailNotifier(subject);32 string message = notifier.Message();this.subject ← Receipt
15public EmailNotifier(string subjectReceipt)16{17 this.subject→ Receipt = subjectReceipt;18}notifier ← EmailNotifier
30string subject = "Receipt";31EmailNotifier notifier→ EmailNotifier = new EmailNotifier(subject);32string message = notifierEmailNotifier.Message();public override string Message()
20public override string Message()21{22 return "email:" + subjectReceipt;23}message ← email:Receipt
31 EmailNotifier notifier = new EmailNotifier(subject);32 string message→ email:Receipt = notifierEmailNotifier.Message();3334 Console.WriteLine($"subject={subjectReceipt}");35 Console.WriteLine($"message={messageemail:Receipt}");36}outputsubject=Receipt message=email:Receipt