To illustrate Jon's point in code, consider the following:
class LevelOne
{
public virtual void SayHi()
{
Console.WriteLine("Hi!");
}
}
class LevelTwo : LevelOne
{
override void SayHi()
{
Console.WriteLine("Hi!");
}
}
class LevelThree : LevelTwo
{
override void SayHi()
{
Console.WriteLine("Hi!");
}
}
Ad infinitum. Now imagine you're at n-depth of derived classes, you have to follow the inheritance hierarchy all the way back to the original base class to find out the access modifier of the method. That's just plain annoying!