title: Abstract class calling an abstract method
body: <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>