abstract class Base {} class Foo extends Base {} class Bar extends Base {} class Baz extends Base {} void foo(x) { } void bar(x) { } void foo_escaped(x) { } void bar_escaped(x) { } void escape(fn) { fn(new Baz()); } main() { foo(new Foo()); bar(new Bar()); escape(foo_escaped); escape(bar_escaped); }