public static void Main()
SuperClass superClassObject = new SuperClass("SuperClass Object in SuperClass variable");
SubClass subClassObject = new SubClass("SubClass Object in SubClass variable");
SuperClass subClassObjectInSuper = new SubClass("SubClass Object in SuperClass variable");
subClassObject.SubClassTrial();
trial(subClassObjectInSuper);
SubClass sub = (SubClass)subClassObjectInSuper;
private static void trial(SuperClass trialObject)
trialObject.ReplaceWithNewMethod("client");
trialObject.ReplaceWithOverrideMethod("client");
trialObject.SuperClassTrial();
public SuperClass(string Id)
public void ReplaceWithNewMethod(string Caller)
Console.WriteLine($"{id}: SuperClass implementation: ReplaceWithNewMethod called from {Caller}");
public virtual void ReplaceWithOverrideMethod(string Caller)
Console.WriteLine($"{id}: SuperClass implementation: ReplaceWithOverrideMethod called from {Caller}");
public void SuperClassTrial()
ReplaceWithOverrideMethod("SuperClass");
ReplaceWithNewMethod("SuperClass");
public class SubClass : SuperClass
public SubClass(string Id) : base(Id) {
public new void ReplaceWithNewMethod(string Caller)
Console.WriteLine($"{id}: SubClass implementation: ReplaceWithNewMethod called from {Caller}");
public override void ReplaceWithOverrideMethod(string Caller)
Console.WriteLine($"{id}: SubClass implementation: ReplaceWithOverrideMethod called from {Caller}");
public void SubClassTrial()
ReplaceWithOverrideMethod("SubClass");
ReplaceWithNewMethod("SubClass");