父类 :
public class Account
{public double balance;
public Account()
{
//
// TODO: Add constructor logic here
//
}
public virtual bool Withdraw(double amt)
{
balance -= amt;
return true;
}
}
子类:
{
public string info;
public CheckAccount()
{
//
// TODO: Add constructor logic here
//
}
//public override bool Withdraw(double amt)
//{
// if(amt<=base.balance)
// {
// return base.Withdraw(amt);
// }
// else
// return false;
//}
}
如果在client代码中使用父类对象指向子类:
Account acc=new CheckAccount();
acc.Withdraw(100);
此时,如果Account中的 Withdraw函数不是虚函数,则直接调用自己的Withdraw()。这时没有amt<=base.balance这条判断。
如果Account中的 Withdraw函数是虚函数,而且在CheckAccount()中有复写Withdraw()函数,则程序会自动调用子类的Withdraw函数。
如果父类中是虚函数,而子类中没有orverride(有withdraw但没有override关键字,或者根本没有withdraw函数),则调用父类的withdraw函数。