Obviously using virtual and override is the normal situation, but does this telecoms'ish example count?
public class Pipe
{
  // whole bunch of protected member variables such as bandwidth, latency, download limit 
  // etc,
  public int GetCost()
  {
     // work out cost based on above
  }
}
public class BigFatPipe : Pipe
{
  public BigFatPipe()
  {
    // sets up the member variables one way
  }
}
public class CheapestPossiblePipe: Pipe
{
  public CheapestPossiblePipe()
  {
    // sets up the member variables another way
  }
}
then you might call
PrintPrice(new BigFatPipe())
PrintPrice(new CheapestPossiblePipe())
public void PrintPrice(Pipe pipe)
{
   int a = pipe.GetCost();
   ....
}
You'll get two different answers. This isn't the most useful example but does it count?
 
     
     
     
     
    