<p>Consider the following code:</p>

<pre><code>Public Class Animal

Public Overridable Function Speak() As String
    Return "Hello"
End Function

End Class

Public Class Dog
    Inherits Animal

    Public Overrides Function Speak() As String
        Return "Ruff"
    End Function

End Class

Dim dog As New Dog
Dim animal As Animal
animal = CType(dog, Animal)
// Want "Hello", getting "Ruff"
animal.Speak()
</code></pre>

<p>How can I convert/ctype the instance of Dog to Animal and have Animal.Speak get called?</p>

You don't; the subclass's method overrides the superclass's method, by definition of inheritance.
If you want the overridden method to be available, expose it in the subclass, e.g.
```
```
Public Class Dog 
    Inherits Animal
    Public Overrides Function Speak() As String
        Return "Ruff"
    End Function
    Public Function SpeakAsAnimal() As String
        Return MyBase.Speak()
    End Function
End Class
```
```