Interface, Polymorphism and type cast

Idea:Use of Interface-polymorphism.
Background:C#-note: p.45-50, MSVC#: Chap. 12, 13


Implement the following Class-diagram:



Use a Console-application, the Dog's Speak method should print out: "Woof", the Cow's: "Muuh" and the Philosopher's: "Hello World".
The Philosopher's Think method should print out: "I think, there for I am".

Can you create a Cow reference and assign it to a Dog object? - if not - why?

Can you invoke the Philosophers Think( ) method directly using the speaker reference? - if not - why?