Swift dispatch to overridden methods in subclass extensions : <p>overriding method signatures in extensions seems to produce unpredictable results in certain cases. The following example demonstrates two different results with a similar pattern.</p>

<pre><code>class A: UIViewController {
    func doThing() {
        print("dothing super class")
    }

    override func viewDidLoad() {
        print("viewdidload superclass")
        super.viewDidLoad()
    }
}

class B: A { }

extension B {
    override func doThing() {
        print("dothing sub class")
        super.doThing()
    }

    override func viewDidLoad() {
        print("viewdidload subclass")
        super.viewDidLoad()
    }
}

let a: A = B()
a.doThing()

let vc: UIViewController = B()
vc.viewDidLoad()
</code></pre>

<p>This prints :</p>

<pre><code>dothing super class
viewdidload subclass
viewdidload superclass
</code></pre>

<p>You can see this skips the <code>B</code>'s implementation of <code>doThing</code> when it is cast as <code>A</code>, however includes both implementations of <code>viewDidLoad</code> when cast as <code>UIViewController</code>. Is this the expected behavior? If so, what is the reason for this?</p>

<p>ENV: Xcode 7.3, Playground</p>
