Virtual keyword can be used to start a new inheritance ladder
using System;
public class Class1 {
public static void Main(string[] strings) {
BankAccount ba = new BankAccount();
Test1(ba);
SavingsAccount sa = new SavingsAccount();
Test1(sa);
Test2(sa);
SpecialSaleAccount ssa = new SpecialSaleAccount();
Test1(ssa);
Test2(ssa);
Test3(ssa);
SaleSpecialCustomer ssc = new SaleSpecialCustomer();
Test1(ssc);
Test2(ssc);
Test3(ssc);
Test4(ssc);
}
public static void Test1(BankAccount account) {
Console.Write("to Test(BankAccount)");
account.Withdrawal(100);
}
public static void Test2(SavingsAccount account) {
Console.Write("to Test(SavingsAccount)");
account.Withdrawal(100);
}
public static void Test3(SpecialSaleAccount account) {
Console.Write("to Test(SpecialSaleAccount)");
account.Withdrawal(100);
}
public static void Test4(SaleSpecialCustomer account) {
Console.Write("to Test(SaleSpecialCustomer)");
account.Withdrawal(100);
}
}
public class BankAccount {
virtual public void Withdrawal(double dWithdrawal) {
Console.WriteLine(" invokes BankAccount.Withdrawal()");
}
}
public class SavingsAccount : BankAccount {
override public void Withdrawal(double dWithdrawal) {
Console.WriteLine(" invokes SavingsAccount.Withdrawal()");
}
}
public class SpecialSaleAccount : SavingsAccount {
new virtual public void Withdrawal(double dWithdrawal) {
Console.WriteLine(" invokes SpecialSaleAccount.Withdrawal()");
}
}
public class SaleSpecialCustomer : SpecialSaleAccount {
override public void Withdrawal(double dWithdrawal) {
Console.WriteLine
(" invokes SaleSpecialCustomer.Withdrawal()");
}
}
Related examples in the same category