Well in your second example the signature of tester() in Test declares a Fasel argument but with the overriden signature of FooTesttester() is declared with a Bla as argument. Since Fasel is a subtype of Bla by their extends hierarchy this is probably wrong.