title: Calling overridden method from super Class itself
body: <p>I have following setup:</p>
  <pre><code>class Human {
      init() {
          eat()
      }
      
      func eat() {
          print(&quot;I eat edible stuff&quot;)
      }
  }
  </code></pre>
  <pre><code>class Vegan: Human {
      
      override init() {
          super.init()
      }
      
      override func eat() {
          print(&quot;No meat or dairy!!&quot;)
      }
  }
  </code></pre>
  <p>Now when I create instance of <code>Vegan()</code> then it actually calls <code>eat()</code> of <code>Vegan</code> and not <code>Human</code>.</p>
  <pre><code>let _ = Vegan()
  
  Output:
  &quot;No meat or dairy!!&quot;    // How? Black magic? it should be &quot;I eat edible stuff&quot; right?
  </code></pre>
  <p>How is this possible? Since call to <code>Human</code>'s <code>init()</code> goes via <code>super</code> shouldn't everything inside of Human's init block get executed on its own context? How it knows and called overrided method? I believed child's implementation gets changed, this is something weird.</p>