An Abstract method is one which cannot be declared in the base class with any implementation: it must be implemented in the derived class.
This forces derived classes to implement the method - or it will not compile. It's used for when you know that all derived classes will need a function, but you have no idea how they will actually implement it.
For example, a Person class may add an abstract ChargeForGoods method, which the derived classes (Employee and Customer) implement differently: the Employee gets an automatic 25% discount, and it is deducted from their wages, while the Customer will be invoiced.
public abstract class Person
{
public abstract void ChargeForGoods(Item item);
public void BuyItem(Person purchaser, Item item)
{
purchacer.ChargeForGoods(item);
}
}
The Person class doesn't need to know how the method is implemented, just that it is!