Abstract class calling an abstract method
<p>Can anyone explain to me why this works the way it does. The output comes out to <code>"Print This"</code>. But how does the base class call <code>bar()</code>, when there is no implementation.</p>

<pre><code>abstract class Base
{
    protected virtual void foo()
    {
        bar();
    }

    protected abstract void bar();
}

class Sub : Program
{
    protected override void foo()
    {
        base.foo();
    }

    protected override void bar()
    {
        Console.WriteLine("Print This");
    }

    static void Main(string[] args)
    {
        Sub obj = new Sub();

        obj.foo();
    }
}
</code></pre>